[
  {
    "path": ".github/workflows/nodejs.yml",
    "content": "# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node\n# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions\n\nname: Node.js CI\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x, 20.x]\n\n    steps:\n    - uses: actions/checkout@v3\n    - name: Use Node.js ${{ matrix.node-version }}\n      uses: actions/setup-node@v3\n      with:\n        node-version: ${{ matrix.node-version }}\n    - run: npm ci\n    - run: npm run lint --workspaces --if-present\n    - run: npm test --workspaces --if-present\n"
  },
  {
    "path": ".gitignore",
    "content": "*.swp\nnode_modules\n.idea\n.DS_Store\n"
  },
  {
    "path": "README.md",
    "content": "# <img src=\"https://recruit-tech.github.io/agreed/media/logo-with-text.svg\" width=\"300\" />\n\n![Node.js CI](https://github.com/recruit-tech/agreed/workflows/Node.js%20CI/badge.svg)\n\nagreed is Consumer Driven Contract tool with JSON mock server.\n\nagreed has 3 features.\n\n1. Create contract file as json(json5/yaml/etc) file\n1. mock server for frontend development\n1. test client for backend development\n\n# Install\n\n```\n$ npm install @agreed/cli -g\n```\n\n# Usage\n\n## Usage as Frontend Mock Server\n\n- Create agreed file (this file is used as a contract between frontend and backend)\n\n```javascript\n// save as agreed.js\nmodule.exports = [\n  {\n    request: {\n      path: '/user/:id',\n      method: 'GET',\n      query: {\n        q: '{:someQueryStrings}',\n      },\n      values: {\n        id: 'yosuke',\n        someQueryStrings: 'foo'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: '{:greeting} {:id} {:someQueryStrings}',\n        images: '{:images}',\n        themes: '{:themes}',\n      },\n      values: {\n        greeting: 'hello',\n        images: [\n          'http://example.com/foo.jpg',\n          'http://example.com/bar.jpg',\n        ],\n        themes: {\n          name: 'green',\n        },\n      }\n    },\n  },\n]\n```\n\n- Run server\n\n```\n$ agreed-server --path ./agreed.js --port 3010\n```\n\n- curl to the mock server\n\n```\n$ curl http://localhost:3010/user/yosuke?q=foo\n{\n  \"message\": \"hello yosuke foo\",\n  \"images\": [\n    \"http://example.com/foo.jpg\",\n    \"http://example.com/bar.jpg\"\n  ],\n  \"themes\": {\n    \"name\": \"green\"\n  }\n}\n```\n\n## Usage as Backend test client\n\n- Run test client for confirm response\n\n```\n$ agreed-client --path ./agreed.js --port 3030 --host example.com\n```\n\n## Usage: Agreed Documentation\n\n- Run documentation server\n\n```\n$ agreed-ui --path ./agreed.js --port 3031\n```\n\n![ScreenShot](https://raw.githubusercontent.com/recruit-tech/agreed-ui/master/screenshot.png)\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"root\",\n  \"private\": true,\n  \"scripts\": {},\n  \"version\": \"0.1.0\",\n  \"workspaces\": [\n    \"packages/cli\",\n    \"packages/client\",\n    \"packages/core\",\n    \"packages/server\",\n    \"packages/typed\",\n    \"packages/ui\"\n  ]\n}\n"
  },
  {
    "path": "packages/cli/.gitignore",
    "content": "*.swp\nnode_modules\n.idea\n.DS_Store\n"
  },
  {
    "path": "packages/cli/.travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"6\"\n  - \"8\"\nscript: npm test\nsudo: false\n"
  },
  {
    "path": "packages/cli/README.md",
    "content": "# <img src=\"https://recruit-tech.github.io/agreed/media/logo-with-text.svg\" width=\"300\" />\n\n[![Build Status](https://travis-ci.org/recruit-tech/agreed.svg?branch=master)](https://travis-ci.org/recruit-tech/agreed)\n\n\nagreed is Consumer Driven Contract tool with JSON mock server.\n\nagreed has 3 features.\n\n1. Create contract file as json(json5/yaml/etc) file\n1. mock server for frontend development.\n1. test client for backend development\n\n# Install\n\n```\n$ npm install agreed -g\n```\n\n# Usage\n\n## Usage as Frontend Mock Server\n\n- Create agreed file (this file is used as a contract between frontend and backend)\n\n```javascript\n// save as agreed.js\nmodule.exports = [\n  {\n    request: {\n      path: '/user/:id',\n      method: 'GET',\n      query: {\n        q: '{:someQueryStrings}',\n      },\n      values: {\n        id: 'yosuke',\n        someQueryStrings: 'foo'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: '{:greeting} {:id} {:someQueryStrings}',\n        images: '{:images}',\n        themes: '{:themes}',\n      },\n      values: {\n        greeting: 'hello',\n        images: [\n          'http://example.com/foo.jpg',\n          'http://example.com/bar.jpg',\n        ],\n        themes: {\n          name: 'green',\n        },\n      }\n    },\n  },\n]\n```\n\n- Run server\n\n```\n$ agreed-server --path ./agreed.js --port 3010\n```\n\n- curl to the mock server\n\n```\n$ curl http://localhost:3010/user/yosuke?q=foo\n{\n  \"message\": \"hello yosuke foo\",\n  \"images\": [\n    \"http://example.com/foo.jpg\",\n    \"http://example.com/bar.jpg\"\n  ],\n  \"themes\": {\n    \"name\": \"green\"\n  }\n}\n```\n\n## Usage as Backend test client\n\n- Run test client for confirm response\n\n```\n$ agreed-client --path ./agreed.js --port 3030 --host example.com\n```\n\n## Usage: Agreed Documentation\n\n- Run documentation server\n\n```\n$ agreed-ui --path ./agreed.js --port 3031\n```\n\n![ScreenShot](https://raw.githubusercontent.com/recruit-tech/agreed-ui/master/screenshot.png)\n"
  },
  {
    "path": "packages/cli/bin/agreed-client.js",
    "content": "#!/usr/bin/env node\n\nrequire('@agreed/client/bin/agreed-client.js');\n"
  },
  {
    "path": "packages/cli/bin/agreed-server.js",
    "content": "#!/usr/bin/env node\n\nrequire('@agreed/server/bin/agreed-server.js');\n"
  },
  {
    "path": "packages/cli/bin/agreed-typed.js",
    "content": "#!/usr/bin/env node\n\nrequire('@agreed/typed/lib/bin/agreed-typed.js');\n"
  },
  {
    "path": "packages/cli/bin/agreed-ui.js",
    "content": "#!/usr/bin/env node\n\nrequire('@agreed/ui/bin/agreed-ui.js');\n"
  },
  {
    "path": "packages/cli/package.json",
    "content": "{\n  \"name\": \"@agreed/cli\",\n  \"version\": \"6.0.0\",\n  \"description\": \"Agreed is a tool for Consumer Driven Contract with JSON mock server\",\n  \"main\": \"index.js\",\n  \"bin\": {\n    \"agreed-server\": \"bin/agreed-server.js\",\n    \"agreed-client\": \"bin/agreed-client.js\",\n    \"agreed-ui\": \"bin/agreed-ui.js\"\n  },\n  \"scripts\": {\n    \"test\": \"eater\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"github.com/recruit-tech/agreed\"\n  },\n  \"keywords\": [\n    \"agreed\",\n    \"consumer\",\n    \"driven\",\n    \"contract\",\n    \"mock\",\n    \"json\",\n    \"server\"\n  ],\n  \"author\": \"yosuke-furukawa\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"eater\": \"4.0.4\",\n    \"plz-port\": \"1.0.0\"\n  },\n  \"dependencies\": {\n    \"@agreed/client\": \"^6.0.0\",\n    \"@agreed/server\": \"^6.0.0\",\n    \"@agreed/typed\": \"^6.0.0\",\n    \"@agreed/ui\": \"^6.0.0\",\n    \"colo\": \"^1.0.0\",\n    \"json5\": \"^2.0.0\",\n    \"minimist\": \"^1.2.0\"\n  },\n  \"homepage\": \"https://github.com/recruit-tech/agreed#readme\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"directories\": {\n    \"test\": \"test\"\n  }\n}\n"
  },
  {
    "path": "packages/cli/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\"\n  ]\n}\n"
  },
  {
    "path": "packages/cli/test/agreed.json5",
    "content": "[\n  {\n    request: {\n      path: '/foo/ba/:hoge',\n      method: 'GET',\n      query: {\n        id: '{:id}'\n      },\n      values: {\n        id: '123',\n        hoge: 'hoge'\n      }\n    },\n    response: {\n      status: 200,\n      body: {\n        message: 'hello',\n        id: '{:id}',\n        path: '{:hoge}',\n      },\n      values: {\n        name: 'yosuke'\n      }\n    },\n  },\n]\n"
  },
  {
    "path": "packages/cli/test/bin/agreed-ui.js",
    "content": "const assert = require('assert');\nconst plzPort = require('plz-port');\nconst cp = require('child_process');\nconst http = require('http');\n\nconst path = './test/agreed.json5';\nplzPort().then((port) => {\n  const proc = cp.exec(`${process.cwd()}/bin/agreed-ui.js --port ${port} --path ${path}`);\n  setTimeout(() => {\n    http.get(`http://localhost:${port}`, (response) => {\n      let body = ''\n      response.on('data', (d) => body += d);\n      response.on('end', () => {\n        assert(body.includes(\"Agreed UI\"))\n        proc.kill('SIGHUP');\n        process.exit(0);\n      });\n    });\n  }, 10000)\n});\n"
  },
  {
    "path": "packages/cli/test/bin/not_passed.js",
    "content": "const assert = require('assert');\nconst plzPort = require('plz-port');\nconst cp = require('child_process');\n\nconst pass = './test/agreed.json5';\nconst not_pass = './test/not_passed.json5';\nplzPort().then((port) => {\n  const proc = cp.exec(`${process.cwd()}/bin/agreed-server.js --port ${port} --path ${not_pass}`);\n  setTimeout(() => {\n    const result = cp.execSync(`${process.cwd()}/bin/agreed-client.js --port ${port} --path ${pass}`).toString();\n    assert(result.indexOf('✗ fail') >= 0);\n    proc.kill();\n\n    setTimeout(() => {\n      process.exit(0);\n    }, 500);\n  }, 10000);\n});\n\n"
  },
  {
    "path": "packages/cli/test/bin/pass.js",
    "content": "const assert = require('assert');\nconst plzPort = require('plz-port');\nconst cp = require('child_process');\n\nconst path = './test/agreed.json5';\nplzPort().then((port) => {\n  const proc = cp.exec(`${process.cwd()}/bin/agreed-server.js --port ${port} --path ${path}`);\n  setTimeout(() => {\n    const result = cp.execSync(`${process.cwd()}/bin/agreed-client.js --port ${port} --path ${path}`).toString();\n    console.log(result);\n    assert(result.indexOf('✔ pass') >= 0);\n    proc.kill();\n\n    setTimeout(() => {\n      process.exit(0);\n    }, 500);\n  }, 10000);\n});\n\nplzPort().then((port) => {\n  const proc = cp.exec(`${process.cwd()}/bin/agreed-server.js --port ${port} --path ${path} --default-headers \" { 'access-control-allow-origin': '*' } \"`);\n  setTimeout(() => {\n    const result = cp.execSync(`${process.cwd()}/bin/agreed-client.js --port ${port} --path ${path}`).toString();\n    console.log(result);\n    assert(result.indexOf('✔ pass') >= 0);\n    proc.kill();\n\n    setTimeout(() => {\n      process.exit(0);\n    }, 500);\n  }, 10000);\n});\n"
  },
  {
    "path": "packages/cli/test/not_passed.json5",
    "content": "[\n  {\n    request: {\n      path: '/foo/ba/:hoge',\n      method: 'GET',\n      query: {\n        id: '{:id}'\n      },\n      values: {\n        id: '123',\n        hoge: 'hoge'\n      }\n    },\n    response: {\n      status: 200,\n      body: {\n        message: 'hi!',\n        path: '{:hoge}',\n      },\n      values: {\n        name: 'yosuke'\n      }\n    },\n  },\n]\n\n"
  },
  {
    "path": "packages/client/.gitignore",
    "content": "*.swp\n.idea\nnode_modules\n.DS_Store\n"
  },
  {
    "path": "packages/client/.travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"6\"\n  - \"8\"\nscript: npm test\nsudo: false\n"
  },
  {
    "path": "packages/client/README.md",
    "content": "agreed-client\n===================\n[![Build Status](https://travis-ci.org/recruit-tech/agreed-client.svg?branch=master)](https://travis-ci.org/recruit-tech/agreed-client)\n\nAn agreed client for check response.\n\n# Install\n\n```\n$ npm install agreed-client -D\n```\n\n# Usage\n\n```javascript\nconst agreedClient = require('agreed-client')\n\nconst {\n  client,\n  agrees,\n  reporter,\n} = agreedClient({\n  path: './test/agreed.json5', // required\n  scheme: 'http', // optional, default is http\n  host: 'localhost', // optional, default is localhost\n  port: 30103, // optional, default is 80\n  defaultRequestHeaders: {\n    'x-jwt-token': 'foobarbaz'\n  }\n})\n\nclient.requestPromise(agrees)\n  .then(reporter)\n  .catch((e) => {\n    console.error(e)\n    process.exit(1)\n  })\n```\n"
  },
  {
    "path": "packages/client/bin/agreed-client.js",
    "content": "#!/usr/bin/env node\n\nconst minimist = require('minimist');\nconst execArgv = minimist(process.execArgv);\nconst argv = minimist(process.argv.slice(2));\nconst colo = require('colo');\nconst agreedClient = require('../index.js');\nconst JSON5 = require('json5');\n\nfunction showHelp(exitcode) {\n  console.log(`\n    agreed-client [--path agreed path file (required)][--port request server port default 80][--host request server host default localhost][--scheme request server scheme default http][--default-request-headers request default headers]\n    agreed-client --path ./agreed.js --port 4000\n    agreed-client --path ./agreed.js --port 4000 --host example.com --scheme http --default-request-headers \"{ 'x-auth-token': 'fugafuga' }\"\n  `);\n  process.exit(exitcode);\n}\n\nif (argv.help) {\n  showHelp(0);\n}\n\nif (argv.version) {\n  const pack = require('../package.json');\n  console.log(pack.version);\n  process.exit(0);\n}\n\nif (!argv.path) {\n  console.error(colo.red('[agreed-client]: --path option is required'));\n  showHelp(1);\n}\n\nif (argv['default-request-headers']) {\n  argv.defaultRequestHeaders = JSON5.parse(argv['default-request-headers']);\n}\n\nconst { client, agrees, reporter } = agreedClient(argv);\nclient.requestPromise(agrees).then(reporter).catch((e) => {\n  console.error(e);\n  process.exit(1);\n});\n"
  },
  {
    "path": "packages/client/index.js",
    "content": "'use strict';\n\nconst Agreed = require('@agreed/core');\nconst filter = require('./lib/filter');\nconst requestPromise = require('./lib/requestPromise');\nconst agreedReporter = require('./lib/reporter');\n\nmodule.exports = (opts) => {\n  if (!opts) {\n    throw new Error('[agreed-client] option is required.');\n  }\n\n  if (!opts.path) {\n    throw new Error('[agreed-client] option.path is required.');\n  }\n\n  opts.scheme = opts.scheme || 'http';\n  opts.host = opts.host || 'localhost';\n  opts.port = opts.port || 80;\n\n  const agreed = new Agreed();\n  const client = agreed.createClient(opts);\n  const agrees = filter(client.getAgreement(), opts.filter);\n  client.requestPromise = requestPromise;\n  const reporter = agreedReporter(agrees);\n\n  return {\n    client,\n    agrees,\n    reporter,\n  };\n};\n"
  },
  {
    "path": "packages/client/lib/client.js",
    "content": "'use strict';\n\nconst agreed = require('@agreed/core');\nconst filter = require('./lib/filter');\n\n"
  },
  {
    "path": "packages/client/lib/filter.js",
    "content": "'use strict';\n\nmodule.exports = (agrees, filter) => {\n  var result = agrees;\n  if (!filter) {\n    return result;\n  }\n\n  if (filter.path) {\n    result = result.filter((agree) => {\n      return agree.request.path.indexOf(filter.path) === 0;\n    });\n  }\n\n  if (filter.method) {\n    result = result.filter((agree) => {\n      return agree.request.method === filter.method;\n    });\n  }\n\n  return result;\n};\n"
  },
  {
    "path": "packages/client/lib/reason.js",
    "content": "'use strict';\n\nconst colo = require('colo');\nconst isEmpty = require('is-empty');\n\nmodule.exports.schemaErrors = (errors) => {\n  if (isEmpty(errors)) {\n    return;\n  }\n\n  if (Array.isArray(errors)) {\n    errors.forEach((error) => {\n      console.log(`${colo.bold('schema errors are found.')}`);\n      console.log(error.stack);\n    });\n  }\n};\n\nmodule.exports.diff = function reason(diff, depth) {\n  if (depth == null) {\n    depth = 0;\n  }\n  if (Array.isArray(diff) && diff.length === 2) {\n    console.log('');\n    const agreed = diff[0];\n    const actual = diff[1];\n    const exp = explain(agreed, actual);\n    exp && console.log(colo.bold(exp));\n    console.log(`${colo.bold.cyan('agreed: ')} ${show(agreed)}`);\n    console.log(`${colo.bold.red('actual: ')} ${show(actual)}`);\n    console.log('');\n    return;\n  } \n  if (depth > 0) {\n    process.stdout.write(colo.bold('.'));\n  }\n  Object.keys(diff).forEach((key) => {\n    process.stdout.write(colo.bold(`${key}`));\n    reason(diff[key], depth + 1);\n  });\n};\n\nfunction explain(agreed, actual) {\n  if (agreed && actual == null) {\n    return 'actual value is undefined, agreed needs some value.';\n  }\n\n  if (typeof agreed !== typeof actual) {\n    return `mismatch type, agreed type is ${typeof agreed}, but actual type is ${typeof actual}`;\n  }\n\n  if (agreed !== actual) {\n    return `mismatch value, agreed value is ${agreed}, but actual value is ${actual}`;\n  }\n}\n\nfunction show(value) {\n  if (value && typeof value === 'object') {\n    return JSON.stringify(value);\n  }\n  return value;\n}\n"
  },
  {
    "path": "packages/client/lib/reporter.js",
    "content": "'use strict';\n\nconst isEmpty = require('is-empty');\nconst colo = require('colo');\nconst reason = require('./reason');\n\nmodule.exports = (agrees) => (results) => {\n  return results.map((result, i) => {\n    const agree = agrees[i];\n    const body = result.body;\n    const diff = result.diff;\n    const schemaErrors = result.schemaErrors;\n\n    const path = `${agree.request.path}`;\n    if ((isEmpty(result) || isEmpty(diff)) && isEmpty(schemaErrors)) {\n      console.log(`${colo.bold.green('✔ pass!')} ${agree.request.method} ${path}`);\n    } else {\n      console.log(`${colo.bold.red('✗ fail!')} ${agree.request.method} ${path}`);\n      body && console.log(`${colo.green('body: ')}`, body);\n      reason.diff(diff);\n      reason.schemaErrors(schemaErrors);\n    }\n  });\n};\n"
  },
  {
    "path": "packages/client/lib/requestPromise.js",
    "content": "'use strict';\n\n// wrapper for request executor\nmodule.exports = function(agrees) {\n  return new Promise((resolve, reject) => {\n    const requests = this.createRequests(agrees);\n    const results = [];\n    requests.forEach((request, i) => {\n      request.on('response', (response) => {\n        this.checkResponse(response, agrees[i]).on('result', (result) => {\n          results[i] = result;\n          if (results.filter(Boolean).length === requests.length) {\n            return resolve(results);\n          }\n        });\n      });\n      request.on('error', reject);\n      request.end();\n    });\n  });\n};\n"
  },
  {
    "path": "packages/client/package.json",
    "content": "{\n  \"name\": \"@agreed/client\",\n  \"version\": \"6.0.0\",\n  \"description\": \"agreed client, testing utilities\",\n  \"main\": \"index.js\",\n  \"bin\": {\n    \"client\": \"bin/agreed-client.js\"\n  },\n  \"scripts\": {\n    \"test\": \"eater\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/recruit-tech/agreed.git\"\n  },\n  \"keywords\": [\n    \"agreed\",\n    \"client\",\n    \"test\",\n    \"confirmation\"\n  ],\n  \"author\": \"yosuke-furukawa\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@agreed/core\": \"^6.0.0\",\n    \"colo\": \"^1.0.0\",\n    \"is-empty\": \"^1.0.0\"\n  },\n  \"devDependencies\": {\n    \"@agreed/server\": \"^6.0.0\",\n    \"eater\": \"4.0.4\",\n    \"plz-port\": \"1.0.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/recruit-tech/agreed/issues\"\n  },\n  \"homepage\": \"https://github.com/recruit-tech/agreed#readme\",\n  \"directories\": {\n    \"lib\": \"lib\",\n    \"test\": \"test\"\n  }\n}\n"
  },
  {
    "path": "packages/client/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\"\n  ]\n}\n"
  },
  {
    "path": "packages/client/test/agreed.json5",
    "content": "[\n  {\n    request: {\n      path: \"/users/:id\",\n      method: \"GET\",\n      values: {\n        id: 'foo'\n      }\n    },\n    response: {\n      body: {\n        message: 'hello {:id}',\n        id: '{:val}',\n      },\n      values: {\n        id: 2\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/users/schema/:id\",\n      method: \"GET\",\n      values: {\n        id: 'foo'\n      }\n    },\n    response: {\n      body: {\n        message: 'hello {:id}',\n        id: '{:val}',\n      },\n      schema: {\n        type: 'object',\n        properties: {\n          message: {\n            type: 'string',\n          },\n          id: {\n            type: 'integer',\n          }\n        }\n      },\n      values: {\n        id: 2\n      }\n    }\n  }\n]\n\n"
  },
  {
    "path": "packages/client/test/agreed_server.json5",
    "content": "[\n  {\n    request: {\n      path: \"/users/:id\",\n      method: \"GET\",\n      values: {\n        id: 'foo'\n      }\n    },\n    response: {\n      body: {\n        message: 'hi {:id}',\n        id: '{:id}',\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/users/schema/:id\",\n      method: \"GET\",\n      values: {\n        id: 'foo'\n      }\n    },\n    response: {\n      body: {\n        message: 'hello {:id}',\n        id: '{:val}',\n      },\n      values: {\n        id: '2'\n      }\n    }\n  }\n]\n\n\n"
  },
  {
    "path": "packages/client/test/bin/agreed-client.exec.js",
    "content": "'use strict';\nconst assert = require('assert');\nconst cp = require('child_process');\nconst agreedServer = require('@agreed/server');\n\nconst path = './test/agreed.json5';\n\nconst server = agreedServer({\n  path: './test/agreed.json5',\n  port: 0,\n}).createServer();\n\n\nserver.on('listening', () => {\n  setTimeout(() => {\n    process.exit(0);\n  }, 500);\n  const exec = `${process.cwd()}/bin/agreed-client.js --port ${server.address().port} --path ${path}`;\n  const proc = cp.exec(exec);\n  let data = '';\n  proc.on('data', (d) => data += d);\n  proc.on('end', () => {\n    assert(data.indexOf('✔ pass') >= 0);\n    server.close();\n    proc.kill();\n  });\n});\n"
  },
  {
    "path": "packages/client/test/client.js",
    "content": "'use strict';\nconst agreedClient = require('../index');\nconst agreedServer = require('@agreed/server');\nconst assert = require('assert');\nconst test = require('eater/runner').test;\n\ntest('client: getAgreement', () => {\n  const { client } = agreedClient({\n    path: './test/agreed.json5',\n    port: 0,\n  });\n  const agrees = client.getAgreement();\n  assert(agrees);\n});\n\ntest('client: requestPromise', () => {\n  const server = agreedServer({\n    path: './test/agreed.json5',\n    port: 0,\n  }).createServer();\n  server.on('listening', () => {\n    const { client } = agreedClient({\n      path: './test/agreed.json5',\n      port: server.address().port,\n    });\n    const agrees = client.getAgreement();\n    client.requestPromise(agrees).then((results) => {\n      assert(results.length === 2);\n      server.close();\n    });\n  });\n});\n\n"
  },
  {
    "path": "packages/client/test/index.js",
    "content": "'use strict';\nconst agreedClient = require('../index');\nconst agreedServer = require('@agreed/server');\nconst test = require('eater/runner').test;\n\ntest('client: smoke', () => {\n  const server = agreedServer({\n    path: './test/agreed_server.json5',\n    port: 0,\n  }).createServer();\n\n  server.on('listening', () => {\n    const { client, agrees, reporter } = agreedClient({\n      path: './test/agreed.json5',\n      port: server.address().port,\n    });\n    client.requestPromise(agrees).then(reporter).then(() => {\n      server.close();\n    });\n  });\n});\n"
  },
  {
    "path": "packages/client/test/lib/reason.js",
    "content": "'use strict';\n\nconst reason = require(`${process.cwd()}/lib/reason`);\nconst test = require('eater/runner').test;\n\ntest('reporter: show reason', () => {\n  const diff = {\n    hoge: [ '{:aaa}', undefined ],\n    ghi: [ 1, 2 ], \n    foo: { \n      b: { \n        fff: [{\n          a: 'hello {:aa}'\n        }, 'aaa'] \n      } \n    } \n  };\n\n  reason.diff(diff);\n});\n"
  },
  {
    "path": "packages/core/.eaterrc",
    "content": "{\n  dir: 'test/lib/',\n  require: [\n    './test/helper/espowerLoader.js'\n  ]\n}\n"
  },
  {
    "path": "packages/core/.eslintrc",
    "content": "{\n    \"extends\": [\n        \"prettier\"\n    ],\n\n    \"env\": {\n        \"node\": true,\n        \"jest\": true,\n        \"es6\": true\n    },\n\n    \"plugins\": [\n        \"prettier\"\n    ],\n\n    \"rules\": {\n        \"prettier/prettier\": [\"error\"]\n    }\n}\n"
  },
  {
    "path": "packages/core/.gitignore",
    "content": "*.swp\nnode_modules\n.idea\n.nyc_output\ncoverage\n.DS_Store\n"
  },
  {
    "path": "packages/core/.travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"10\"\n  - \"12\"\nscript: \n  - npm run lint\n  - npm test\nafter_success: npm run codecov\nsudo: false\ncache:\n  directories:\n    - node_modules\n"
  },
  {
    "path": "packages/core/README.md",
    "content": "agreed-core\n====================\n[![Build Status](https://travis-ci.org/recruit-tech/agreed-core.svg?branch=master)](https://travis-ci.org/recruit-tech/agreed-core)\n[![codecov](https://codecov.io/gh/recruit-tech/agreed-core/branch/master/graph/badge.svg)](https://codecov.io/gh/recruit-tech/agreed-core)\n\nagreed is Consumer Driven Contract tool with JSON mock server.\n\nagreed has 3 features.\n\n1. Create contract file as json(json5/yaml/etc) file\n1. mock server for frontend development.\n1. test client for backend development\n\n`agreed-core` is a library to create test client and mock server. `agreed-core` provide the following features.\n\n1. json5/yaml require hook, you can write require('foo.json5') / require('bar.yaml') using agreed-core/register.\n1. server middleware, agreed-core provides express/pure node http middleware.\n1. test client, agreed-core provides response check.\n\n# Install\n\n```\n$ npm install agreed-core --dev\n```\n\n# Usage\n\n## Usage as Frontend Mock Server\n\n- Create agreed file (this file is used as a contract between frontend and backend)\n\n```javascript\nmodule.exports = [\n  {\n    request: {\n      path: '/user/:id',\n      method: 'GET',\n      query: {\n        q: '{:someQueryStrings}',\n        index: '{:index}',\n      },\n      values: {\n        id: 'yosuke',\n        someQueryStrings: 'bye',\n        index: 2,\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // hello yosuke bye\n        message: '{:greeting} {:id} {:someQueryStrings}',\n        // http://example.com/baz.jpg \n        image: '{:images[:index]}',\n        themes: [\n          // { name: 'green' }\n          {\n            name: '{:themes.0.name}'\n          },\n          // { name: 'blue' }, { name: 'red' }\n          '{:themes.1-last}'\n        ],\n      },\n      // you can write json schema\n      // schema: {\n      //   type: 'object',\n      //   properties: {\n      //     message: { type: 'string' },\n      //     image: { type: 'string' },\n      //     themes: { \n      //       type: 'array',\n      //       items: { \n      //         type: 'object',\n      //         properties: {\n      //           name: { type: 'string' }\n      //         }\n      //       }\n      //     }\n      //   }\n      // },\n      values: {\n        greeting: 'hello',\n        images: [\n          'http://example.com/foo.jpg',\n          'http://example.com/bar.jpg',\n          'http://example.com/baz.jpg',\n        ],\n        themes: [\n          {\n            name: 'green',\n          },\n          {\n            name: 'blue',\n          },\n          {\n            name: 'red',\n          },\n        ]\n      }\n    },\n  },\n]\n```\n\n- Create server\n\nWe support express, pure node.js and any other frameworks can use agreed.\n\n```javascript\n'use strict';\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst Agreed = require('agreed-core');\nconst agreed = new Agreed();\nconst app = express();\n\napp.use(bodyParser.json());\n\napp.use(agreed.middleware({\n  path: './agreed/file/agreed.js',\n}));\n\napp.use((err, req, res, next) => {\n  res.statusCode = 500;\n  res.send(`Error is occurred : ${err}`);\n});\napp.listen(3000);\n```\n\n```\n$ node server.js\n```\n\n- call server from client\n\n```\n$ curl http://localhost:3000/user/alice?q=foo\n{ \n  \"message\": \"hello alice foo\",\n  \"images\": [\n    \"http://example.com/foo.jpg\",\n    \"http://example.com/bar.jpg\"\n  ],\n  \"themes\": {\n    \"name\": \"green\",\n  },\n}\n```\n\n## Usage as Backend test client\n\nagreed can be test client.\n\n- Reuse agreed file\n\n```javascript\nmodule.exports = [\n  {\n    request: {\n      path: '/user/:id',\n      method: 'GET',\n      query: {\n        q: '{:someQueryStrings}',\n      },\n      values: {\n        id: 'yosuke',\n        someQueryStrings: 'foo'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: '{:greeting} {:id} {:someQueryStrings}',\n        images: '{:images}',\n        themes: '{:themes}',\n      },\n      values: {\n        greeting: 'hello',\n        images: [\n          'http://example.com/foo.jpg',\n          'http://example.com/bar.jpg',\n        ],\n        themes: {\n          name: 'green',\n        },\n      }\n    },\n  },\n]\n```\n\n- Create test client \n\n```javascript\n'use strinct';\nconst Agreed = require('agreed-core');\nconst agreed = new Agreed();\nconst client = agreed.createClient({\n  path: './agreed/file/agreed.js',\n  host: 'example.com',\n  port: 12345,\n});\n\n// Get Agreements as array.\nconst agrees = client.getAgreement();\n\n// request to servers.\n// in this case, GET example.com:12345/user/yosuke?q=foo\nconst responses = client.executeAgreement(agrees);\n\n// Check response object.\nclient.checkResponse(responses, agrees).then((diffs) => {\n  // if the response is mismatched to agreed response,\n  // you can get diff.\n  // but if no difference, you can get empty object {}\n  diffs.forEach((diff) => {\n    if (Object.keys(diff).length > 0) {\n      console.error('your request does not matched: ', diff);\n    }\n  });\n});\n```\n\n\n# APIs\n\n## Agreement\n\n### how to define API specs\n\nAgreement file can be written in JSON5/YAML/JavaScript format. You can choose your favorite format.\n\n- JSON5 example\n\n```javascript\n[\n  {\n    \"request\": {\n      \"path\": '/hoge/fuga',\n      \"method\": 'GET',\n      // you can write query\n      \"query\": {\n        \"q\": 'foo',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: 'hello world',\n      },\n    },\n  },\n  {\n    \"request\": {\n      // you can write regexp path, \n      // match /users/yosuke\n      \"path\": '/users/:id',\n      \"method\": 'GET',\n    },\n    response: {\n      // embed path :id to your response body \n      // if request path /users/yosuke\n      // return { \"message\": \"hello yosuke\" }\n      body: {\n        message: 'hello {:id}',\n      },\n    },\n  },\n  // you can write json file\n  // see test/agrees/hoge/foo.json\n  './hoge/foo.json',\n  // you can write yaml file\n  // see test/agrees/foo/bar.yaml\n  './foo/bar.yaml',\n  // you can separate request/response json\n  {\n    request: './qux/request.json',\n    response: './qux/response.json',\n  },\n  {\n    request: {\n      path: '/path/:id',\n      method: 'POST',\n      // query embed data, any query is ok.\n      query: {\n        meta: \"{:meta}\",\n      },\n      body: {\n        message: \"{:message}\"\n      },\n      // value for test client\n      values: {\n        id: 'yosuke',\n        meta: true,\n        message: 'foobarbaz'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}, {:meta}, {:message}',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/images/:id',\n      method: 'GET',\n      query: {\n        q: '{:someQueryStrings}',\n      },\n      values: {\n        id: 'yosuke',\n        someQueryStrings: 'foo'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: '{:greeting} {:id} {:someQueryStrings}',\n        images: '{:images}',\n        themes: '{:themes}',\n      },\n      values: {\n        greeting: 'hello',\n        images: [\n          'http://example.com/foo.jpg',\n          'http://example.com/bar.jpg',\n        ],\n        themes: {\n          name: 'green',\n        },\n      }\n    },\n  },\n  {\n    request: {\n      path: '/useschema/:index',\n      method: 'GET',\n      values: {\n        index: 1\n      }\n    },\n    response: {\n      body: {\n        result : '{:list[:index]}'\n      },\n      // you can write json schema\n      schema: {\n        type: 'object',\n        properties: {\n          result: {\n            type: 'string'\n          }\n        },\n      },\n      values: {\n        list: [\n          'hello',\n          'hi',\n          'dunke',\n        ]\n      }\n    },\n  },\n]\n```\n\n"
  },
  {
    "path": "packages/core/index.js",
    "content": "module.exports = require(\"./lib/agreed\");\n"
  },
  {
    "path": "packages/core/lib/agreed.js",
    "content": "\"use strict\";\nconst Server = require(\"./server\");\nconst Client = require(\"./client\");\n\nclass Agreed {\n  middleware(options) {\n    this.server = new Server(options);\n    return (req, res, next) => {\n      this.server.useMiddleware(req, res, next);\n    };\n  }\n  createClient(options) {\n    this.client = new Client(options);\n    return this.client;\n  }\n}\n\nmodule.exports = Agreed;\n"
  },
  {
    "path": "packages/core/lib/check/CheckBodyStream.js",
    "content": "\"use strict\";\n\nconst Writable = require(\"stream\").Writable;\nconst diff = require(\"./diff\");\nconst schemaValidator = require(\"./schemaValidator\");\n\nclass CheckBodyStream extends Writable {\n  constructor(options) {\n    super(options);\n    this.data = \"\";\n    this.result = {};\n    this.on(\"finish\", () => {\n      if (typeof this.expect === \"object\") {\n        if (this.data.length === 0) {\n          this.result.body = this.data;\n          this.result.error = \"empty body\";\n          this.emit(\"checked\", this.result);\n          return;\n        }\n        try {\n          this.data = JSON.parse(this.data);\n        } catch (e) {\n          this.result.body = this.data;\n          this.result.error = \"broken json: \" + e;\n          this.emit(\"checked\", this.result);\n          return;\n        }\n        this.result.body = this.data;\n        this.result.diff = diff(this.expect, this.data);\n      } else {\n        this.result.body = this.data;\n        this.result.diff = diff(this.expect, this.data) || {};\n      }\n\n      if (this.expectSchema) {\n        const validatedResult = schemaValidator(this.data, this.expectSchema);\n        const errors = validatedResult.errors;\n        if (errors.length > 0) {\n          this.result.schemaErrors = errors;\n        }\n      }\n\n      this.emit(\"checked\", this.result);\n    });\n  }\n\n  expect(obj) {\n    this.expect = obj;\n  }\n\n  schema(obj) {\n    this.expectSchema = obj;\n  }\n\n  _write(chunk, encoding, callback) {\n    this.data += chunk;\n    callback();\n  }\n}\n\nmodule.exports = CheckBodyStream;\n"
  },
  {
    "path": "packages/core/lib/check/checker.js",
    "content": "\"use strict\";\n\nconst isInclude = require(\"./isInclude\");\nconst url = require(\"url\");\nconst logger = require(\"../utils/logger\");\nconst { hasTemplate } = require(\"../template/hasTemplate\");\nconst tmplBind = require(\"../template/bind\");\n\nconst nullishStrings = [\"undefined\", \"null\", \"\"];\n\nclass Checker {\n  static validRequest(result, request, req, debug) {\n    if (!result || !result.error) {\n      return true;\n    }\n\n    if (debug) {\n      logger.log(result.error);\n      logger.log(\"agreed request\", request);\n      logger.log(\"actual request\", req);\n    }\n\n    return false;\n  }\n\n  static request(request, req, options) {\n    const parsedUrl = url.parse(req.url);\n    let similarity = 0;\n    let result = Checker.method(request.method, req.method);\n    similarity += result.similarity;\n    if (!Checker.validRequest(result, request, req, options.debug)) {\n      return { result: false, similarity, error: result.error };\n    }\n    result = Checker.url(request.pathToRegexp, parsedUrl.pathname, options);\n    similarity += result.similarity;\n    if (!Checker.validRequest(result, request, req, options.debug)) {\n      return { result: false, similarity, error: result.error };\n    }\n    result = Checker.headers(request.headers, req.headers, options);\n    similarity += result.similarity;\n    if (!Checker.validRequest(result, request, req, options.debug)) {\n      return { result: false, similarity, error: result.error };\n    }\n    result = Checker.body(request.body, req.body, options);\n    similarity += result.similarity;\n    if (!Checker.validRequest(result, request, req, options.debug)) {\n      return { result: false, similarity, error: result.error };\n    }\n    // query\n    // The value of the given query character.\n    result = Checker.query(request.query, req.query, options);\n    similarity += result.similarity;\n    if (\n      !Checker.validRequest(result, request, req, options.debug) ||\n      (result.similarity == 0 && options.enablePreferQuery)\n    ) {\n      return { result: false, similarity, error: result.error };\n    }\n    return { result: true, similarity };\n  }\n\n  static method(entryMethod, reqMethod) {\n    const result = { similarity: 1 };\n    if (entryMethod.toLowerCase() !== reqMethod.toLowerCase()) {\n      result.type = \"METHOD\";\n      result.error = `Does not match METHOD, expect ${entryMethod}, but ${reqMethod}.`;\n      result.similarity = 0;\n    }\n    return result;\n  }\n\n  static url(entryUrl, reqUrl, options) {\n    const result = { similarity: 1 };\n    const match = entryUrl.exec(reqUrl);\n    const { pathToRegexpKeys, values = {} } = options;\n    if (!match) {\n      result.type = \"URL\";\n      result.error = `Does not match URL, expect ${entryUrl}, but ${reqUrl}.`;\n      result.similarity = 0;\n      return result;\n    }\n    const paths = {};\n    pathToRegexpKeys.forEach((pathKey, index) => {\n      paths[pathKey.name] = match[index + 1];\n    });\n\n    let valuesSimilarity = 1;\n    if (pathToRegexpKeys.length !== 0) {\n      let matched = 0;\n      Object.keys(paths).forEach((k) => {\n        if (paths[k] === values[k] + \"\") {\n          matched++;\n        }\n      });\n      valuesSimilarity = matched / pathToRegexpKeys.length;\n    }\n\n    const nullish = Checker.checkNullish(paths);\n    const nullishError = nullish.error;\n    const nullishSimilarity = nullish.similarity;\n    result.type = \"URL\";\n    result.error = nullishError;\n    result.similarity = nullishSimilarity;\n\n    if (result.similarity >= 1) {\n      result.similarity += valuesSimilarity;\n    }\n\n    return result;\n  }\n\n  static headers(entryHeaders, reqHeaders, options) {\n    const result = { similarity: 1 };\n    if (!entryHeaders) return result;\n    if (!isInclude(entryHeaders, reqHeaders)) {\n      result.type = \"HEADERS\";\n      result.error = `Does not include header, expect ${JSON.stringify(\n        entryHeaders\n      )} but ${JSON.stringify(reqHeaders)}`;\n      result.similarity = 0;\n      return result;\n    }\n\n    if (!options.skipCheckHeaderValueNullable) {\n      const nullish = Checker.checkNullish(reqHeaders);\n      const nullishError = nullish.error;\n      const nullishSimilarity = nullish.similarity;\n      if (nullish) {\n        result.type = \"HEADERS\";\n        result.error = nullishError;\n        result.similarity = nullishSimilarity;\n        return result;\n      }\n    }\n    return result;\n  }\n\n  static body(entryBody, reqBody, options) {\n    const result = { similarity: 1 };\n    if (!entryBody) return result;\n    if (!isInclude(entryBody, reqBody)) {\n      result.type = \"BODY\";\n      result.error = `Does not include body, expect ${JSON.stringify(\n        entryBody\n      )} but ${JSON.stringify(reqBody)}`;\n      result.similarity = 0;\n    }\n    return result;\n  }\n\n  static query(entryQuery, reqQuery, options) {\n    const result = { similarity: 1 };\n    if (!entryQuery) return result;\n    if (!isInclude(entryQuery, reqQuery)) {\n      result.type = \"QUERY\";\n      result.error = `Does not include query, expect ${JSON.stringify(\n        entryQuery\n      )} but ${JSON.stringify(reqQuery)}`;\n      result.similarity = 0;\n    }\n\n    if (options.enablePreferQuery) {\n      // e.g.)\n      // entryQuery = { q: \"{:someQueryStrings }\" }\n      // reqQuery = { q: \"bar\" }\n      const existEntryQuery = Object.keys(entryQuery).length > 0;\n      if (existEntryQuery)\n        return this.queryWhenCarefulCheckRequired(\n          reqQuery,\n          entryQuery,\n          options\n        );\n    }\n\n    return result;\n  }\n\n  static queryWhenCarefulCheckRequired(reqQuery, entryQuery, options) {\n    const result = { similarity: 1 };\n    const isMatch = Object.keys(reqQuery).every((key) => {\n      if (entryQuery[key] != undefined) {\n        const tmpl = hasTemplate(entryQuery[key]);\n        const hasTmpl = tmpl !== null && tmpl.length > 0;\n        const reqValue = reqQuery[key];\n\n        if (hasTmpl) {\n          // e.g.) {\":someQueryStrings\"} => someQueryStrings\n          const normalizedKey = entryQuery[key].replace(/\\{|\\}|\\:/g, \"\");\n          return this.matchQueryWhenHasTmpl(\n            reqQuery,\n            entryQuery,\n            options,\n            reqValue,\n            normalizedKey\n          );\n        } else {\n          // e.g.) entryQuery = { foo: \"foo\", bar: \"bar\" }\n          // e.g.) entryParameters = { id: \"yosuke\" }\n          const entryQueryValue = entryQuery[key];\n          return reqValue === entryQueryValue;\n        }\n      } else {\n        // An undefined query string may have been passed\n        return false;\n      }\n    });\n\n    result.similarity = isMatch ? 1 : 0;\n    return result;\n  }\n\n  static matchQueryWhenHasTmpl(\n    reqQuery,\n    entryQuery,\n    options,\n    reqValue,\n    normalizedKey\n  ) {\n    // e.g.) { \"someQueryStrings\": \"bar\" }\n    const calcEntryParameters = tmplBind(entryQuery, reqQuery);\n    const calcEntryQueryValue = calcEntryParameters[normalizedKey];\n\n    // e.g.) { id: \"yosuke\", someQueryStrings: \"bar\" }\n    // include path parameters\n    const entryParameters = options.values;\n\n    // Consideration when the query string is given in the path\n    //\n    // e.g.)\n    // path = \"/test/arrayreqs/agreed/values?year_months[]=201708&year_months[]=201709&year_months[]=201810\"\n    // options = { pathToRegexpKeys: [], values: undefined, debug: undefined }\n    if (entryParameters !== undefined) {\n      const entryQueryValue = entryParameters[normalizedKey];\n\n      // By definition, it can be defined as a numerical value, but in reality, only a numerical value as a character string can be passed.\n      return (\n        calcEntryQueryValue == String(entryQueryValue) &&\n        reqValue === String(entryQueryValue)\n      );\n    } else {\n      return reqValue == calcEntryQueryValue;\n    }\n  }\n\n  static checkNullish(obj = {}) {\n    const result = { similarity: 1 };\n    const keys = Object.keys(obj);\n    for (var i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      const realValue = obj[key];\n\n      if (typeof realValue === \"object\" && realValue) {\n        return Checker.checkNullish(realValue);\n      }\n\n      if (nullishStrings.indexOf(realValue) >= 0) {\n        result.error = `Request value has nullish strings ${realValue} in ${key}`;\n        result.similarity = 0.5;\n        return result;\n      }\n    }\n    return result;\n  }\n}\n\nmodule.exports = Checker;\n"
  },
  {
    "path": "packages/core/lib/check/completion.js",
    "content": "\"use strict\";\n\nconst { pathToRegexp } = require(\"path-to-regexp\");\nconst path = require(\"path\");\nconst requireAgree = require(\"../require_hook/requireAgree\");\n\nconst DEFAULT_REQUEST = require(\"./defaultRequest\");\nconst DEFAULT_RESPONSE = require(\"./defaultResponse\");\n\nmodule.exports = (agree, base, opts = {}) => {\n  if (typeof agree === \"string\") {\n    agree = normalizedRequire(agree, base, opts.hot);\n  }\n\n  if (!agree) {\n    throw new Error(`[agreed] agree object is not found`);\n  }\n\n  if (typeof agree.request === \"string\") {\n    agree.request = normalizedRequire(agree.request, base, opts.hot);\n  }\n\n  if (typeof agree.response === \"string\") {\n    agree.response = normalizedRequire(agree.response, base, opts.hot);\n  }\n\n  if (!agree.request) {\n    throw new Error(\n      `[agreed] resquest object is required ${JSON.stringify(agree)}`\n    );\n  }\n\n  if (!agree.response) {\n    throw new Error(\n      `[agreed] response object is required ${JSON.stringify(agree)}`\n    );\n  }\n\n  if (!agree.request.path) {\n    throw new Error(\n      `[agreed] request path is required ${JSON.stringify(agree.request)}`\n    );\n  }\n\n  if (!agree.request.method) {\n    agree.request.method = DEFAULT_REQUEST.method;\n  }\n\n  if (typeof agree.request.path !== \"string\") {\n    throw new Error(\n      `[agreed] request path must be string ${JSON.stringify(agree.request)}`\n    );\n  }\n\n  if (typeof agree.request.method !== \"string\") {\n    throw new Error(\n      `[agreed] request method must be string ${JSON.stringify(agree.request)}`\n    );\n  }\n\n  agree.request.pathToRegexpKeys = [];\n\n  agree.request.pathToRegexp = pathToRegexp(\n    agree.request.path,\n    agree.request.pathToRegexpKeys\n  );\n\n  if (!agree.request.headers) {\n    agree.request.headers = DEFAULT_REQUEST.headers;\n  } else {\n    agree.request.headers = Object.assign(\n      {},\n      DEFAULT_REQUEST.headers,\n      agree.request.headers\n    );\n  }\n\n  if (opts.defaultRequestHeaders) {\n    agree.request.headers = Object.assign(\n      {},\n      opts.defaultRequestHeaders,\n      agree.request.headers\n    );\n  }\n\n  agree.request.headers = toLowerCaseKeys(agree.request.headers);\n\n  if (!agree.response.status) {\n    agree.response.status = DEFAULT_RESPONSE.status;\n  }\n\n  if (!agree.response.headers) {\n    agree.response.headers = DEFAULT_RESPONSE.headers;\n  } else {\n    agree.response.headers = Object.assign(\n      {},\n      DEFAULT_RESPONSE.headers,\n      agree.response.headers\n    );\n  }\n\n  if (opts.defaultResponseHeaders) {\n    agree.response.headers = Object.assign(\n      {},\n      opts.defaultResponseHeaders,\n      agree.response.headers\n    );\n  }\n\n  agree.response.body = agree.response.body || DEFAULT_RESPONSE.body;\n\n  if (typeof agree.response.schema === \"string\") {\n    agree.response.schema = normalizedRequire(\n      agree.response.schema,\n      base,\n      opts.hot\n    );\n  }\n\n  return agree;\n};\n\nfunction normalizedRequire(file, base, hot) {\n  return path.isAbsolute(file)\n    ? requireAgree(file, hot)\n    : requireAgree(path.join(base, file), hot);\n}\n\nfunction toLowerCaseKeys(obj) {\n  const keys = Object.keys(obj);\n  const result = {};\n\n  keys.forEach((key) => {\n    result[key.toLowerCase()] = obj[key];\n  });\n  return result;\n}\n"
  },
  {
    "path": "packages/core/lib/check/defaultRequest.js",
    "content": "module.exports = {\n  method: \"GET\",\n  body: \"\",\n  headers: {},\n};\n"
  },
  {
    "path": "packages/core/lib/check/defaultResponse.js",
    "content": "module.exports = {\n  status: 200,\n  headers: {\n    \"Content-Type\": \"application/json; charset=utf-8\",\n  },\n  body: \"\",\n};\n"
  },
  {
    "path": "packages/core/lib/check/diff.js",
    "content": "\"use strict\";\n\nconst {\n  hasTemplate,\n  hasTemplateWithAnyString,\n  isRestArrayTemplate,\n} = require(\"../template/hasTemplate\");\nconst toRegexp = require(\"../template/toRegexp\");\n\nmodule.exports = function includeDiff(small, large) {\n  const result = {};\n  if (small === large) return;\n\n  if (small instanceof Date && large instanceof Date) {\n    if (small.getTime() !== large.getTime()) {\n      return [small, large];\n    }\n  }\n\n  if (typeof small !== \"object\") {\n    if (hasTemplate(small) && large === null) return;\n\n    // {:foo} is template\n    if (hasTemplate(small) && large != null) {\n      if (hasTemplateWithAnyString(small)) {\n        const reg = toRegexp(small);\n        if (typeof large === \"string\" && large.match(reg)) {\n          return;\n        }\n      } else {\n        return;\n      }\n    }\n\n    // {:foo.1-last} is rest array template\n    if (isRestArrayTemplate(small)) {\n      return;\n    }\n    return [small, large];\n  }\n\n  if ((small && !large) || (!small && large)) {\n    return [small, large];\n  }\n\n  if (typeof small !== typeof large) {\n    return [small, large];\n  }\n\n  const attrs = Object.keys(small);\n  for (const attr of attrs) {\n    const diff = includeDiff(small[attr], large[attr]);\n    if (diff && Object.keys(diff).length > 0) {\n      result[attr] = diff;\n    }\n  }\n  return result;\n};\n"
  },
  {
    "path": "packages/core/lib/check/extract.js",
    "content": "\"use strict\";\n\nconst url = require(\"url\");\nconst qs = require(\"querystring\");\nconst { pathToRegexp } = require(\"path-to-regexp\");\nconst format = require(\"../template/format\");\n\nmodule.exports.incomingRequest = (req) => {\n  return new Promise((resolve, reject) => {\n    const result = {};\n\n    const urlObj = url.parse(req.url);\n    result.method = req.method;\n    result.path = urlObj.pathname;\n    result.query = qs.parse(urlObj.query);\n    result.url = req.url;\n    result.headers = req.headers;\n\n    if (req.body) {\n      result.body = req.body;\n      return resolve(result);\n    }\n\n    // has some body contents\n    if (req.headers && req.headers[\"content-length\"]) {\n      var data = \"\";\n      req.on(\"readable\", () => {\n        const chunk = req.read();\n        if (chunk) {\n          data += chunk;\n        }\n      });\n      req.on(\"end\", () => {\n        result.body = JSON.parse(data);\n        resolve(result);\n      });\n      req.on(\"error\", reject);\n    } else {\n      return resolve(result);\n    }\n  });\n};\n\nmodule.exports.outgoingRequest = (req, opts) => {\n  const result = {};\n  result.path =\n    req.path.indexOf(\":\") >= 0\n      ? tryCompilePath(req.path, req.values)\n      : req.path;\n  const query = req.query && qs.stringify(format(req.query, req.values));\n  if (query) {\n    result.path += `?${query}`;\n  }\n  result.method = req.method;\n  result.headers = (req.headers && format(req.headers, req.values)) || {};\n  result.host = opts.host;\n  result.port = opts.port;\n  return result;\n};\n\nfunction tryCompilePath(path, values) {\n  try {\n    return pathToRegexp.compile(path)(values);\n  } catch (e) {\n    return path.replace(/:/g, \"\");\n  }\n}\n"
  },
  {
    "path": "packages/core/lib/check/isContentJSON.js",
    "content": "\"use strict\";\n\nmodule.exports = (obj) => {\n  const isContentJSON =\n    obj.headers &&\n    obj.headers[\"Content-Type\"] &&\n    obj.headers[\"Content-Type\"].indexOf(\"application/json\") >= 0;\n  return isContentJSON || typeof obj.body === \"object\";\n};\n"
  },
  {
    "path": "packages/core/lib/check/isInclude.js",
    "content": "\"use strict\";\n\nconst { isRestArrayTemplate, hasTemplate } = require(\"../template/hasTemplate\");\n\nmodule.exports = function isInclude(small, large) {\n  if (small === large) return true;\n\n  if (small instanceof Date && large instanceof Date) {\n    return small.getTime() === large.getTime();\n  }\n\n  if (typeof small != \"object\" || small === null) {\n    if (hasTemplate(small) && large !== undefined) {\n      return true;\n    }\n\n    // {:foo.1-last} is rest array template\n    if (isRestArrayTemplate(small)) {\n      return true;\n    }\n\n    return small == large;\n  }\n\n  if ((small && !large) || (!small && large)) {\n    return false;\n  }\n\n  const attrs = Object.keys(small);\n  for (const attr of attrs) {\n    if (!isInclude(small[attr], large[attr])) return false;\n  }\n  return true;\n};\n"
  },
  {
    "path": "packages/core/lib/check/schemaValidator.js",
    "content": "const validate = require(\"jsonschema\").validate;\n\nmodule.exports = (target, schema) => {\n  return validate(target, schema);\n};\n"
  },
  {
    "path": "packages/core/lib/client.js",
    "content": "\"use strict\";\n\nconst http = require(\"http\");\nconst https = require(\"https\");\nconst path = require(\"path\");\nconst CheckBodyStream = require(\"./check/CheckBodyStream\");\nconst completion = require(\"./check/completion\");\nconst extract = require(\"./check/extract\");\nconst isContentJSON = require(\"./check/isContentJSON\");\nconst register = require(\"./register\");\nconst format = require(\"./template/format\");\nconst requireUncached = require(\"./require_hook/requireUncached\");\n\nclass Client {\n  constructor(options = {}) {\n    this.agrees = options.agrees;\n    if (!options.agrees) {\n      this.agreesPath = require.resolve(path.resolve(options.path));\n      this.base = path.dirname(this.agreesPath);\n    }\n    this.scheme = options.scheme || \"http\";\n    this.host = options.host || \"localhost\";\n    this.port = options.port || 80;\n    this.options = options;\n    register();\n  }\n\n  getAgreement() {\n    const agrees = this.agrees || [].concat(requireUncached(this.agreesPath));\n    return this.completion(agrees);\n  }\n\n  setup(agree) {\n    if (typeof agree !== \"object\" && agree) {\n      throw new TypeError(\"agree should be object\");\n    }\n    const options = extract.outgoingRequest(agree.request, this);\n    const hasContentJSON = isContentJSON(agree.request);\n    const content =\n      hasContentJSON && agree.request.body !== null\n        ? JSON.stringify(format(agree.request.body, agree.request.values))\n        : agree.request.body;\n    const contentLength = content ? Buffer.byteLength(content) : 0;\n    options.headers[\"Content-Length\"] = contentLength;\n    if (agree.request.headers && agree.request.headers[\"content-type\"]) {\n      options.headers[\"Content-Type\"] = agree.request.headers[\"content-type\"];\n      delete options.headers[\"content-type\"];\n    } else {\n      options.headers[\"Content-Type\"] = \"application/json\";\n    }\n    return { options, content, contentLength };\n  }\n\n  createRequest(setting) {\n    if (typeof setting !== \"object\" && setting) {\n      throw new TypeError(\"setting should be object\");\n    }\n    const { options, content, contentLength } = setting;\n    const scheme = this.scheme === \"https\" ? https : http;\n    const request = scheme.request(options);\n    contentLength && request.write(content);\n    request.agreed = {\n      options,\n      content,\n      contentLength\n    };\n    return request;\n  }\n\n  createRequests(agrees) {\n    const completedAgrees = this.completion(agrees);\n    const requests = completedAgrees.map(agree => {\n      const setting = this.setup(agree);\n      return this.createRequest(setting);\n    });\n    return requests;\n  }\n\n  checkResponse(response, agree) {\n    const completedAgree = completion(agree, this.base);\n    const isSameStatus = completedAgree.response.status == response.statusCode;\n    const checkStream = new CheckBodyStream();\n    checkStream.expect(completedAgree.response.body);\n    checkStream.schema(completedAgree.response.schema);\n    return response.pipe(checkStream).on(\"checked\", result => {\n      if (!isSameStatus) {\n        result.diff = result.diff || {};\n        result.diff.status = [\n          completedAgree.response.status,\n          response.statusCode\n        ];\n      }\n      checkStream.emit(\"result\", result);\n    });\n  }\n\n  completion(agrees) {\n    return agrees.map(agree => completion(agree, this.base, this.options));\n  }\n}\n\nmodule.exports = Client;\n"
  },
  {
    "path": "packages/core/lib/register.js",
    "content": "\"use strict\";\n\nconst json5Hook = require(\"./require_hook/json5\");\nconst yamlHook = require(\"./require_hook/yaml\");\nconst tsHook = require(\"./require_hook/typescript\");\n\nmodule.exports = (option = {}, hot = true) => {\n  json5Hook();\n  yamlHook();\n  tsHook(option, hot);\n};\n"
  },
  {
    "path": "packages/core/lib/require_hook/compile.js",
    "content": "module.exports = (module, file, object) => {\n  module._compile(\"module.exports = \" + JSON.stringify(object), file);\n};\n"
  },
  {
    "path": "packages/core/lib/require_hook/hook.js",
    "content": "\"use strict\";\n\nconst fs = require(\"fs\");\nconst compile = require(\"./compile\");\n\nmodule.exports = (parse, extensions) => {\n  extensions.forEach((ext) => {\n    delete require.extensions[ext];\n    require.extensions[ext] = (module, file) => {\n      const agree = parse(fs.readFileSync(file).toString(\"utf-8\"));\n      compile(module, file, agree);\n    };\n  });\n};\n"
  },
  {
    "path": "packages/core/lib/require_hook/json5.js",
    "content": "\"use strict\";\n\nconst EXTENSIONS = [\".json\", \".json5\"];\nconst JSON5 = require(\"json5\");\nconst hook = require(\"./hook\");\n\nmodule.exports = () => hook(JSON5.parse, EXTENSIONS);\n"
  },
  {
    "path": "packages/core/lib/require_hook/requireAgree.js",
    "content": "const requireUncached = require(\"./requireUncached\");\n\nmodule.exports = (agree, hot = true) => {\n  return hot ? requireUncached(agree) : require(agree);\n};\n"
  },
  {
    "path": "packages/core/lib/require_hook/requireUncached.js",
    "content": "module.exports = (module) => {\n  delete require.cache[require.resolve(module)];\n  return require(module);\n};\n"
  },
  {
    "path": "packages/core/lib/require_hook/typescript.js",
    "content": "\"use strict\";\n\nconst ts = require(\"typescript\");\nconst fs = require(\"fs\");\nlet cache = null;\n\nconst transpile = (src, options = {}) => {\n  const res = ts.transpileModule(\n    src,\n    options || {\n      compilerOptions: { module: ts.ModuleKind.CommonJS },\n    }\n  ).outputText;\n  return res;\n};\n\nconst takeCache = (options) => {\n  try {\n    if (!cache && options.typedCachePath) {\n      const data = fs.readFileSync(options.typedCachePath).toString(\"utf-8\");\n      const cache = JSON.parse(data);\n      return cache;\n    }\n    return {};\n  } catch (e) {\n    return {};\n  }\n};\n\nconst getCacheAgree = (file, cache, mtimeMs) => {\n  if (cache && cache[file]) {\n    if (cache[file].mtimeMs === mtimeMs) {\n      return cache[file];\n    }\n  }\n  return {};\n};\n\nconst writeCacheOnExit = (options) => {\n  if (options.typedCachePath) {\n    process.on(\"SIGINT\", () => {\n      process.exit();\n    });\n    process.on(\"exit\", () => {\n      if (cache) {\n        fs.writeFileSync(options.typedCachePath, JSON.stringify(cache));\n      }\n    });\n  }\n};\n\nmodule.exports = (options, hot) => {\n  cache = takeCache(options);\n  writeCacheOnExit(options);\n  require.extensions[\".ts\"] = (module, file) => {\n    if (!options.typedCachePath) {\n      const src = fs.readFileSync(file).toString(\"utf-8\");\n      const agree = transpile(src, options);\n      module._compile(agree, file);\n      if (hot) {\n        delete require.cache[file];\n      }\n      return;\n    }\n    const { mtimeMs } = fs.statSync(file);\n    const cached = getCacheAgree(file, cache, mtimeMs);\n    let agree = cached.agree;\n    if (!agree) {\n      const src = fs.readFileSync(file).toString(\"utf-8\");\n      agree = transpile(src, options);\n      cache[file] = {\n        mtimeMs,\n        agree,\n      };\n    }\n    // TODO: need to embed cache hit or not\n    module._compile(agree, file);\n    if (hot) {\n      fs.watch(file, () => {\n        delete require.cache[file];\n        delete cache[file];\n      });\n    }\n  };\n};\n"
  },
  {
    "path": "packages/core/lib/require_hook/yaml.js",
    "content": "\"use strict\";\n\nconst EXTENSIONS = [\".yaml\", \".yml\"];\nconst YAML = require(\"yamljs\");\nconst hook = require(\"./hook\");\n\nmodule.exports = () => hook(YAML.parse, EXTENSIONS);\n"
  },
  {
    "path": "packages/core/lib/server.js",
    "content": "\"use strict\";\n\nconst path = require(\"path\");\nconst url = require(\"url\");\nconst stable = require(\"stable\");\nconst Checker = require(\"./check/checker\");\nconst completion = require(\"./check/completion\");\nconst extract = require(\"./check/extract\");\nconst isContentJSON = require(\"./check/isContentJSON\");\nconst register = require(\"./register\");\nconst format = require(\"./template/format\");\nconst hasTemplate = require(\"./template/hasTemplate\").hasTemplate;\nconst bind = require(\"./template/bind\");\nconst requireAgree = require(\"./require_hook/requireAgree\");\nconst EventEmitter = require(\"events\").EventEmitter;\n\nclass Server {\n  constructor(options = {}) {\n    this.agrees = options.agrees;\n    if (!options.agrees) {\n      this.agreesPath = require.resolve(path.resolve(options.path));\n      this.base = path.dirname(this.agreesPath);\n    }\n    this.options = options;\n    this.notifier = new EventEmitter();\n    const registerOpts = { \n      typedCachePath: options.typedCachePath,\n      ...this.options.register,\n    };\n    register(registerOpts, this.options.hot);\n  }\n  useMiddleware(req, res, next) {\n    const agrees = (\n      this.agrees || requireAgree(this.agreesPath, this.options.hot)\n    ).map(agree => completion(agree, this.base, this.options));\n\n    extract\n      .incomingRequest(req)\n      .then(req => {\n        const agreesWithResults = stable(\n          agrees.map(agree => {\n            const { result, similarity, error } = Checker.request(\n              agree.request,\n              req,\n              {\n                pathToRegexpKeys: agree.request.pathToRegexpKeys,\n                values: agree.request.values,\n                debug: this.options.debug,\n                enablePreferQuery: this.options.enablePreferQuery,\n                skipCheckHeaderValueNullable: this.options.skipCheckHeaderValueNullable,\n              }\n            );\n            return { agree, result, similarity, error };\n          }),\n          (a, b) => b.similarity - a.similarity\n        );\n\n        if (\n          this.options.strict &&\n          agreesWithResults.filter(({ result }) => result).length > 1\n        ) {\n          res.header(\"Content-Type\", \"application/json\", \"charset=utf-8\");\n          res.statusCode = 500;\n          res.end(\n            JSON.stringify(\n              {\n                message: \"Ambiguous Request\",\n                candidates: agreesWithResults\n                  .filter(({ result }) => result)\n                  .map(({ agree: { request, response } }) => {\n                    delete request.pathToRegexpKeys;\n                    delete request.pathToRegexp;\n                    delete response.pathToRegexpKeys;\n                    delete response.pathToRegexp;\n                    return { request, response };\n                  })\n              },\n              null,\n              2\n            )\n          );\n          return;\n        }\n\n        const result = agreesWithResults.find(({ result }) => result);\n\n        if (!result || !result.agree) {\n          if (this.options.callNextWhenNotFound) {\n            typeof next === \"function\" && next();\n            return;\n          }\n          res.statusCode = 404;\n          const { agree, similarity, error } = agreesWithResults.shift();\n\n          if (similarity > 1) {\n            delete agree.request.pathToRegexp;\n            delete agree.request.pathToRegexpKeys;\n            res.end(\n              `Agree Not Found, actual request is ${JSON.stringify(\n                req, null, 2\n              )}, but similar agree request is ${JSON.stringify(\n                agree.request, null, 2\n              )}, error: ${error}`\n            );\n          } else {\n            res.end(`Agree Not Found`);\n          }\n\n          typeof next === \"function\" && next();\n          return;\n        }\n\n        const { agree } = result;\n\n        // /foo/:id matched\n        if (agree.request.pathToRegexpKeys.length > 0) {\n          const pathname = url.parse(req.url).pathname;\n          const result = agree.request.pathToRegexp.exec(pathname);\n          const values = {};\n          agree.request.pathToRegexpKeys.forEach((pathKey, index) => {\n            values[pathKey.name] = result[index + 1];\n          });\n          agree.request.values = values;\n        }\n\n        if (\n          agree.request.headers &&\n          hasTemplate(JSON.stringify(agree.request.headers))\n        ) {\n          agree.request.values = Object.assign(\n            {},\n            agree.request.values,\n            bind(agree.request.headers, req.headers)\n          );\n        }\n\n        if (\n          agree.request.query &&\n          hasTemplate(JSON.stringify(agree.request.query))\n        ) {\n          agree.request.values = Object.assign(\n            {},\n            agree.request.values,\n            bind(agree.request.query, req.query)\n          );\n        }\n\n        if (\n          agree.request.body &&\n          hasTemplate(JSON.stringify(agree.request.body))\n        ) {\n          agree.request.values = Object.assign(\n            {},\n            agree.request.values,\n            bind(agree.request.body, req.body)\n          );\n        }\n\n        res.statusCode = format(agree.response.status, agree.request.values);\n\n        let messageBody = agree.response.body || \"\";\n\n        if (agree.request.values) {\n          messageBody = format(\n            messageBody,\n            agree.request.values,\n            agree.response.funcs\n          );\n        }\n\n        if (agree.response.values) {\n          messageBody = format(\n            messageBody,\n            Object.assign({}, agree.response.values, agree.request.values),\n            agree.response.funcs\n          );\n        }\n\n        if (isContentJSON(agree.response)) {\n          messageBody = JSON.stringify(messageBody);\n        }\n\n        Object.keys(agree.response.headers).forEach(header => {\n          res.setHeader(\n            header,\n            format(\n              agree.response.headers[header],\n              Object.assign(\n                {},\n                agree.response.values || {},\n                agree.request.values || {}\n              ),\n              agree.response.funcs\n            )\n          );\n        });\n\n        if (agree.response.notify) {\n          const notify = format(\n            agree.response.notify.body,\n            Object.assign(\n              {},\n              agree.response.values || {},\n              agree.request.values || {}\n            ),\n            agree.response.funcs\n          );\n          this.notifier.emit(agree.response.notify.event || \"message\", notify);\n        }\n\n        res.end(messageBody);\n        if (agree.request.values) {\n          delete agree.request.values;\n        }\n      })\n      .catch(e => {\n        typeof next === \"function\" && next(e);\n        process.nextTick(() => {\n          throw e;\n        });\n      });\n  }\n}\n\nmodule.exports = Server;\n"
  },
  {
    "path": "packages/core/lib/template/bind.js",
    "content": "\"use strict\";\nconst constants = require(\"./constants\");\nconst hasTemplate = require(\"./hasTemplate\").hasTemplate;\n\nmodule.exports = function bind(hasFormatObj, hasValueObj, result, original) {\n  if (!result) result = {};\n  if (!original) original = hasValueObj;\n  if (typeof hasFormatObj === \"object\") {\n    Object.keys(hasFormatObj).forEach((key) => {\n      if (hasTemplate(hasFormatObj[key])) {\n        const formatName = hasFormatObj[key].replace(\n          constants.TEMPLATE_REGEXP,\n          \"$2\"\n        );\n        const formatParts = formatName.split(\".\");\n        if (formatParts.length > 1) {\n          formatParts.forEach((part) => {\n            if (hasValueObj[part]) {\n              result[part] = hasValueObj[part];\n            } else if (original[part]) {\n              result[part] = original[part];\n            }\n          });\n          return;\n        }\n        result[formatName] = hasValueObj[key];\n      } else if (hasFormatObj[key] && typeof hasFormatObj[key] === \"object\") {\n        bind(hasFormatObj[key], hasValueObj[key], result, original);\n      }\n    });\n  }\n\n  return result;\n};\n"
  },
  {
    "path": "packages/core/lib/template/constants.js",
    "content": "\"use strict\";\n\nconst OPERATIONAL_STRINGS = \"\\\\w+\";\nconst REGEXP_STRING = `{(${OPERATIONAL_STRINGS})*:([\\\\w|\\\\.|,|:|\\\\[|\\\\]|\\\\-]+)\\\\}`;\nconst BRACKETS_STRING = \"\\\\[:([\\\\w]+)\\\\]\";\nconst REST_ARRAY_STRING = \"{:.+\\\\d+-last}\";\n\nconst TEMPLATE_REGEXP_GLOBAL = new RegExp(REGEXP_STRING, \"g\");\nconst TEMPLATE_REGEXP = new RegExp(REGEXP_STRING);\nconst TEMPLATE_BRACKETS_REGEXP_GLOBAL = new RegExp(BRACKETS_STRING, \"g\");\nconst TEMPLATE_BRACKETS_REGEXP = new RegExp(BRACKETS_STRING);\nconst TEMPLATE_REST_ARRAY_STRING_GLOBAL = new RegExp(REST_ARRAY_STRING, \"g\");\n\nmodule.exports.TEMPLATE_REGEXP = TEMPLATE_REGEXP;\nmodule.exports.TEMPLATE_REGEXP_GLOBAL = TEMPLATE_REGEXP_GLOBAL;\nmodule.exports.TEMPLATE_BRACKETS_REGEXP = TEMPLATE_BRACKETS_REGEXP;\nmodule.exports.TEMPLATE_BRACKETS_REGEXP_GLOBAL =\n  TEMPLATE_BRACKETS_REGEXP_GLOBAL;\nmodule.exports.TEMPLATE_REST_ARRAY_STRING_GLOBAL =\n  TEMPLATE_REST_ARRAY_STRING_GLOBAL;\n"
  },
  {
    "path": "packages/core/lib/template/format.js",
    "content": "\"use strict\";\n\nmodule.exports = format;\n\nconst constants = require(\"./constants\");\nconst operation = require(\"./operation\");\n\nfunction format(template, args, funcs = {}) {\n  var result = template;\n\n  if (Array.isArray(template)) {\n    return formatArray(template, args, funcs);\n  }\n\n  if (typeof template === \"object\") {\n    return formatObject(template, args, funcs);\n  }\n\n  if (typeof template !== \"string\") {\n    return result;\n  }\n\n  if (!args) return result;\n  if (Object.keys(args).length === 0) return result;\n\n  // matches {:foo} {:foo.bar} {:foo[:aaa]}\n  const matches = template.match(constants.TEMPLATE_REGEXP_GLOBAL);\n\n  if (!matches) return result;\n\n  matches.forEach((match) => {\n    var rawKey = match.replace(constants.TEMPLATE_REGEXP, \"$2\");\n\n    // brackets notation like '{:array[:index]}'\n    if (rawKey.indexOf(\"[:\") >= 0) {\n      const matches = rawKey.match(constants.TEMPLATE_BRACKETS_REGEXP_GLOBAL);\n\n      matches &&\n        matches.forEach((match) => {\n          const key = match.replace(constants.TEMPLATE_BRACKETS_REGEXP, \"$1\");\n          const value = \".\" + key.split(\".\").reduce((o, i) => o && o[i], args);\n\n          if (value != null) {\n            rawKey = rawKey.replace(match, value);\n          }\n        });\n    }\n\n    var value = rawKey.split(\",\").map((key) => {\n      if (key && args[key]) {\n        return args[key];\n      }\n      return key.split(\".\").reduce((val, k) => {\n        if (val) {\n          const a = k.match(/(\\d+)-(\\d+|last)/);\n          if (a) {\n            const start = a[1];\n            const end = a[2] === \"last\" ? val.length : a[2];\n            const array = val.slice(start, end);\n            array.__spread = true;\n            return array;\n          }\n          return val[k];\n        }\n      }, args);\n    });\n\n    var operationalKey = match.replace(constants.TEMPLATE_REGEXP, \"$1\");\n    if (operationalKey) {\n      var operationValue = operation(operationalKey, funcs, ...value);\n    }\n\n    if (Array.isArray(value) && value.length === 1) {\n      value = value[0];\n    }\n\n    if (operationValue) {\n      value = operationValue;\n    }\n\n    if (value === undefined) {\n      return;\n    }\n\n    if (match === template) {\n      result = value;\n    } else {\n      result = result.replace(match, value);\n    }\n  });\n\n  return result;\n}\n\nfunction formatObject(obj, args, funcs) {\n  var result = {};\n  if (!obj) {\n    return obj;\n  }\n\n  Object.keys(obj).forEach((key) => {\n    const value = obj[key];\n    result[key] = format(value, args, funcs);\n  });\n  return result;\n}\n\nfunction formatArray(array, args, funcs) {\n  var result = [];\n  if (!array) {\n    return array;\n  }\n\n  array.forEach((item) => {\n    const formattedItem = format(item, args, funcs);\n    if (formattedItem.__spread) {\n      formattedItem.forEach((item) => {\n        result.push(item);\n      });\n    } else {\n      result.push(formattedItem);\n    }\n  });\n\n  return result;\n}\n"
  },
  {
    "path": "packages/core/lib/template/hasTemplate.js",
    "content": "\"use strict\";\n\nconst constants = require(\"./constants\");\n\nmodule.exports.hasTemplate = (str) => {\n  return typeof str === \"string\" && str.match(constants.TEMPLATE_REGEXP_GLOBAL);\n};\n\nmodule.exports.hasTemplateWithAnyString = (str) => {\n  if (typeof str !== \"string\") {\n    return false;\n  }\n  const removed = str.replace(constants.TEMPLATE_REGEXP_GLOBAL, \"\");\n  return removed.length > 0;\n};\n\nmodule.exports.isRestArrayTemplate = (str) => {\n  return (\n    typeof str === \"string\" &&\n    str.match(constants.TEMPLATE_REST_ARRAY_STRING_GLOBAL)\n  );\n};\n"
  },
  {
    "path": "packages/core/lib/template/operation/index.js",
    "content": "\"use strict\";\n\nconst randomInt = require(\"./randomInt\");\nconst randomString = require(\"./randomString\");\nconst parseInt = require(\"./parseInt\");\nconst unixtime = require(\"./unixtime\");\nconst path = require(\"path\");\n\nmodule.exports = (operation, funcs, ...values) => {\n  if (typeof funcs[operation] === \"function\") {\n    const result = funcs[operation](...values);\n    return result;\n  } else if (typeof funcs[operation] === \"string\") {\n    const basedir = funcs.basedir || process.cwd();\n    const funcPath = path.resolve(basedir, funcs[operation]);\n    const result = require(funcPath)(...values);\n    return result;\n  } else if (operation === \"randomInt\") {\n    const [value] = values;\n    const result = randomInt(value);\n    return result;\n  } else if (operation === \"parseInt\") {\n    const [value] = values;\n    const result = parseInt(value);\n    return result;\n  } else if (operation === \"randomString\") {\n    const [value] = values;\n    const result = randomString(value);\n    return result;\n  } else if (operation === \"unixtime\") {\n    const result = unixtime();\n    return result;\n  }\n};\n"
  },
  {
    "path": "packages/core/lib/template/operation/parseInt.js",
    "content": "module.exports = Number.parseInt;\n"
  },
  {
    "path": "packages/core/lib/template/operation/randomInt.js",
    "content": "function getRandom(min = 0, max = Number.MAX_SAFE_INTEGER) {\n  if (min > max) {\n    max = min;\n    min = 0;\n  }\n  return Math.trunc(Math.random() * (max - min) + min);\n}\n\nfunction randomInt(value) {\n  if (typeof value === \"number\") {\n    return getRandom(value);\n  }\n  const matched = value.match(/(\\d+)-(\\d+)/);\n  if (!matched) {\n    return getRandom();\n  }\n  const min = matched[1];\n  const max = matched[2];\n  return getRandom(min, max);\n}\n\nmodule.exports = randomInt;\n"
  },
  {
    "path": "packages/core/lib/template/operation/randomString.js",
    "content": "function getRandom(length = 5) {\n  var char = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n  var charLength = char.length;\n  var random = \"\";\n\n  for (var i = 0; i < length; i++) {\n    random += char[Math.floor(Math.random() * charLength)];\n  }\n  return random;\n}\n\nfunction randomString(value) {\n  if (typeof value === \"number\") {\n    return getRandom(value);\n  }\n  return getRandom();\n}\n\nmodule.exports = randomString;\n"
  },
  {
    "path": "packages/core/lib/template/operation/unixtime.js",
    "content": "const unixtime = () => parseInt(Date.now() / 1000);\nmodule.exports = unixtime;\n"
  },
  {
    "path": "packages/core/lib/template/toRegexp.js",
    "content": "\"use strict\";\n\nconst constants = require(\"./constants\");\n\nmodule.exports = (str) => {\n  var rawString = str.replace(constants.TEMPLATE_REGEXP_GLOBAL, \".*\");\n  rawString = \"^\" + rawString + \"$\";\n  return new RegExp(rawString);\n};\n"
  },
  {
    "path": "packages/core/lib/utils/logger.js",
    "content": "const logger = global.logger || console;\nmodule.exports = logger;\n"
  },
  {
    "path": "packages/core/package.json",
    "content": "{\n  \"name\": \"@agreed/core\",\n  \"version\": \"6.0.0\",\n  \"description\": \"agreed is a mock server and test client, agreed will be helper for Consumer Driven Contract\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"eater\",\n    \"lcov\": \"nyc --reporter=lcov npm test\",\n    \"codecov\": \"npm run lcov && codecov\",\n    \"lint\": \"run-s lint:*\",\n    \"lint:lib\": \"eslint ./lib/**/*.js\",\n    \"lint:test\": \"eslint ./test/**/*.js\",\n    \"lint:root\": \"eslint ./*.js\",\n    \"lintfix:lib\": \"eslint ./lib/**/*.js --fix\",\n    \"lintfix:test\": \"eslint ./test/**/*.js --fix\",\n    \"lintfix:root\": \"eslint ./*.js --fix\",\n    \"lintfix\": \"run-s lintfix:*\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/recruit-tech/agreed.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/recruit-tech/agreed-core/issues\"\n  },\n  \"homepage\": \"https://github.com/recruit-tech/agreed-core\",\n  \"keywords\": [\n    \"agreed\",\n    \"consumer\",\n    \"driven\",\n    \"contract\",\n    \"mock\",\n    \"test\",\n    \"server\"\n  ],\n  \"author\": \"yosuke-furukawa\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@types/node\": \"^18.0.0\",\n    \"json5\": \"^2.0.0\",\n    \"jsonschema\": \"^1.2.4\",\n    \"path-to-regexp\": \"^6.0.0\",\n    \"stable\": \"^0.1.8\",\n    \"typescript\": \"^4.0.0\",\n    \"yamljs\": \"^0.3.0\"\n  },\n  \"devDependencies\": {\n    \"assert-stream\": \"1.1.1\",\n    \"body-parser\": \"1.20.0\",\n    \"codecov\": \"3.8.3\",\n    \"eater\": \"4.0.4\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-prettier\": \"8.7.0\",\n    \"eslint-plugin-prettier\": \"4.2.1\",\n    \"espower-loader\": \"1.2.2\",\n    \"express\": \"4.18.2\",\n    \"is-empty\": \"1.2.0\",\n    \"must-call\": \"1.0.0\",\n    \"npm-run-all\": \"4.1.5\",\n    \"nyc\": \"15.1.0\",\n    \"plz-port\": \"1.0.0\",\n    \"power-assert\": \"1.6.1\",\n    \"prettier\": \"2.8.4\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"directories\": {\n    \"lib\": \"lib\",\n    \"test\": \"test\"\n  }\n}\n"
  },
  {
    "path": "packages/core/register.js",
    "content": "module.exports = require(\"./lib/register\");\n"
  },
  {
    "path": "packages/core/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\"\n  ]\n}\n"
  },
  {
    "path": "packages/core/requireUncached.js",
    "content": "module.exports = require(\"./lib/require_hook/requireUncached\");\n"
  },
  {
    "path": "packages/core/test/agrees/agrees.js",
    "content": "module.exports = [\n  {\n    request: {\n      path: \"/hoge/fuga\",\n      method: \"GET\",\n      query: {\n        q: \"foo\",\n      },\n    },\n    response: {\n      headers: {\n        \"x-csrf-token\": \"csrf-token\",\n      },\n      body: {\n        message: \"hello world\",\n      },\n    },\n  },\n  \"./hoge/foo.json\",\n  \"./foo/bar.yaml\",\n  {\n    request: require(\"./qux/request.json\"),\n    response: require(\"./qux/response.json\"),\n  },\n  {\n    request: {\n      path: \"/path/:id\",\n      method: \"GET\",\n      // value for test client\n      values: {\n        id: \"yosuke\",\n      },\n    },\n    response: {\n      headers: {\n        \"x-csrf-token\": \"csrf-token\",\n      },\n      body: {\n        // :id is for request value\n        message: \"hello {:id}\",\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/path/:id\",\n      method: \"POST\",\n      // query embed data, any query is ok.\n      query: {\n        meta: \"{:meta}\",\n      },\n      body: {\n        message: \"{:message}\",\n      },\n      // value for test client\n      values: {\n        id: \"yosuke\",\n        meta: true,\n        message: \"foobarbaz\",\n      },\n    },\n    response: {\n      headers: {\n        \"x-csrf-token\": \"csrf-token\",\n      },\n      body: {\n        // :id is for request value\n        message: \"hello {:id}, {:meta}, {:message}\",\n      },\n    },\n  },\n  {\n    request: {\n      // if no method then GET\n      path: \"/nyan/:id\",\n      query: {\n        meta: \"{:meta}\",\n      },\n      // value for test client\n      values: {\n        id: \"yosuke\",\n        meta: false,\n      },\n    },\n    response: {\n      headers: {\n        \"x-csrf-token\": \"csrf-token\",\n      },\n      body: {\n        // :id is for request value\n        message: \"hello {:id}, {:meta}\",\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/embed/from/response/:id\",\n      method: \"POST\",\n      query: {\n        meta: \"{:meta}\",\n      },\n      body: {\n        message: \"{:message}\",\n      },\n      // value for test client\n      values: {\n        id: \"yosuke\",\n        meta: false,\n        message: \"this is a message\",\n      },\n    },\n    response: {\n      headers: {\n        \"x-csrf-token\": \"csrf-token\",\n      },\n      body: {\n        // embed template from response values\n        image: \"{:image}\",\n        topics: \"{:topics}\",\n        message: \"hello {:id} {:meta} {:message}\",\n      },\n      values: {\n        image:\n          \"http://imgfp.hotp.jp/SYS/cmn/images/front_002/logo_hotopepper_264x45.png\",\n        topics: [\n          {\n            a: \"a\",\n          },\n          {\n            b: \"b\",\n          },\n        ],\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/images/:id\",\n      method: \"GET\",\n      query: {\n        q: \"{:someQueryStrings}\",\n      },\n      values: {\n        id: \"yosuke\",\n        someQueryStrings: \"foo\",\n      },\n    },\n    response: {\n      headers: {\n        \"x-csrf-token\": \"csrf-token\",\n      },\n      body: {\n        message: \"{:greeting} {:id} {:someQueryStrings}\",\n        images: \"{:images}\",\n        themes: \"{:themes}\",\n      },\n      values: {\n        greeting: \"hello\",\n        images: [\"http://example.com/foo.jpg\", \"http://example.com/bar.jpg\"],\n        themes: {\n          name: \"green\",\n        },\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/list/:index\",\n      method: \"GET\",\n      values: {\n        index: 1,\n      },\n    },\n    response: {\n      body: {\n        result: \"{:list[:index]}\",\n      },\n      values: {\n        list: [\"hello\", \"hi\", \"dunke\"],\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/useschema/:index\",\n      method: \"GET\",\n      values: {\n        index: 1,\n      },\n    },\n    response: {\n      body: {\n        result: \"{:list[:index]}\",\n      },\n      schema: {\n        type: \"object\",\n        properties: {\n          result: {\n            type: \"string\",\n          },\n        },\n      },\n      values: {\n        list: [\"hello\", \"hi\", \"dunke\"],\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/useschema/withstring/:index\",\n      method: \"GET\",\n      values: {\n        index: 1,\n      },\n    },\n    response: {\n      body: {\n        result: \"{:list[:index]}\",\n      },\n      schema: \"./schema/hi.json\",\n      values: {\n        list: [\"hello\", \"hi\", \"dunke\"],\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/headers/:index\",\n      method: \"GET\",\n      headers: {\n        \"x-token\": \"{:token}\",\n        \"x-api-key\": \"{:apiKey}\",\n      },\n      values: {\n        index: 2,\n        token: \"nyan\",\n        apiKey: \"nyaaan\",\n      },\n    },\n    response: {\n      body: {\n        result: \"{:list[:index]} {:token} {:apiKey}\",\n      },\n      values: {\n        list: [\"hello\", \"hi\", \"dunke\"],\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/headers/:index\",\n      method: \"GET\",\n      values: {\n        index: 1,\n      },\n    },\n    response: {\n      body: {\n        result: \"{:list[:index]}\",\n      },\n      values: {\n        list: [\"hello\", \"hi\", \"dunke\"],\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/headers/test/:index\",\n      method: \"GET\",\n      headers: {\n        \"x-test-token\": \"{:xTestToken}\",\n      },\n      values: {\n        index: 1,\n        xTestToken: \"fdajfdsaoijfdoajofdjaoj\",\n      },\n    },\n    response: {\n      body: {\n        result: \"{:list[:index]}\",\n      },\n      values: {\n        list: [\"hello\", \"hi\", \"dunke\"],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/core/test/agrees/agrees.json5",
    "content": "[\n  {\n    request: {\n      path: '/hoge/fuga',\n      method: 'GET',\n      query: {\n        q: 'foo',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: 'hello world',\n      },\n    },\n  },\n  './hoge/foo.json',\n  './foo/bar.yaml',\n  {\n    request: './qux/request.json',\n    response: './qux/response.json',\n  },\n  {\n    request: {\n      path: '/path/:id',\n      method: 'GET',\n      // value for test client\n      values: {\n        id: 'yosuke',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/path/:id',\n      method: 'POST',\n      // query embed data, any query is ok.\n      query: {\n        meta: \"{:meta}\",\n      },\n      body: {\n        message: \"{:message}\"\n      },\n      // value for test client\n      values: {\n        id: 'yosuke',\n        meta: true,\n        message: 'foobarbaz'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}, {:meta}, {:message}',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/path/header/format',\n      method: 'GET',\n    },\n    response: {\n      headers: {\n        'access-control-allow-origin': '{:acao}'\n      },\n      body: {\n        message: 'hello',\n      },\n      values: {\n        'acao': '*'\n      }\n    },\n  },\n  {\n    request: {\n      path: '/path/default/header/',\n      method: 'GET',\n    },\n    response: {\n      body: {\n        message: 'hello',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/path/default/request/header/',\n      method: 'GET',\n      headers: {\n        'x-forwarded-for': 'forward'\n      },\n    },\n    response: {\n      body: {\n        message: 'forward',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/case/insensitive/headers',\n      method: 'GET',\n      headers: {\n        'This-Headers-Should-Be-Lower-Case': 'true'\n      },\n    },\n    response: {\n      body: {\n        message: 'hello case insensitive headers',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/null/agreed/values',\n    },\n    response: {\n      body: {\n        messages: [\n          { message: '{:messages.0.message}' },\n          '{:messages.1-last}'\n        ],\n      },\n      values: {\n        messages: [\n          { message: null },\n          { message: 'test' },\n        ]\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/randomstring/agreed/values',\n    },\n    response: {\n      body: {\n        random: '{randomString:random}'\n      },\n      values: {\n        random: 8\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/randomint/agreed/values',\n    },\n    response: {\n      body: {\n        random: '{randomInt:random}'\n      },\n      values: {\n        random: '1-1000'\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/parseint/agreed/values/:id',\n    },\n    response: {\n      body: {\n        id: '{parseInt:id}'\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/agreed/messages',\n      method: 'POST',\n      body: {\n        messages: [\n          { message: '{:messages.0.message}' },\n          '{:messages.1-last}'\n        ]\n      },\n      values: {\n        messages: [\n          { message: null },\n          { message: 'test' },\n        ]\n      }\n    },\n    response: {\n      status: 201,\n      body: {\n        results: '{:messages}'\n      },\n      values: {\n        messages: [\n          { message: '{:message0}' },\n          { message: 'test' },\n        ]\n      }\n    },\n  },\n  {\n    request: {\n      path: '/test/agreed/use/null/obj',\n      method: 'POST',\n      body: {\n        test: '{:test}'\n      },\n      values: {\n        test: null,\n      }\n    },\n    response: {\n      status: 201,\n      body: {\n        results: '{:test}'\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/bind/nest/object',\n      method: 'POST',\n      body: {\n        time: {\n          start: '{:time.start}',\n          end: '{:time.end}',\n          break: {\n            start: '{:time.break.start}',\n            end: '{:time.break.end}',\n          }\n        },\n        members: [\n          {\n            id: '{:members.0.id}'\n          },\n          '{:members.1-last}'\n        ]\n      }\n    },\n    response: {\n      body: {\n        time: {\n          start: '{:time.start}',\n          end: '{:time.end}'\n        },\n        break: {\n          start: '{:time.break.start}',\n          end: '{:time.break.end}'\n        },\n        members: [\n          {\n            id: '{:id}'\n          },\n          '{:members.1-last}'\n        ]\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/unixtime/agreed/values',\n    },\n    response: {\n      body: {\n        unixtime: '{unixtime:time}',\n      },\n      values: {\n        time: 12344556677,\n      }\n    },\n  },\n]\n"
  },
  {
    "path": "packages/core/test/agrees/agrees.ts",
    "content": "module.exports = [{\n  request: {\n    path: '/ts-messages',\n    method: 'POST',\n    body: {\n      message: '{:message}'\n    },\n    values: {\n      message: 'test'\n    }\n  }, \n  response: {\n    body: {\n      result: '{:message}'\n    },\n    values: {\n      message: 'test'\n    },\n  },\n}];\n"
  },
  {
    "path": "packages/core/test/agrees/foo/bar.yaml",
    "content": "request: \n  path: '/foo/:bar'\n  method: 'PUT'\n  body:\n    a: 'b'\n    c: 'd'\nresponse:\n  headers:\n    Content-Type: 'text'\n  body: 'hello put'\n\n"
  },
  {
    "path": "packages/core/test/agrees/hoge/foo.json",
    "content": "{\n  'request': {\n    method: 'POST',\n    path: '/hoge/:foo',\n    body: {\n      message: 'foobarbaz',\n    },\n  },\n  response: {\n    body: {\n      message: 'hello post',\n    },\n  },\n}\n"
  },
  {
    "path": "packages/core/test/agrees/hoge/fuga/_agree.json",
    "content": "{\n  request: {\n    method: 'GET',\n  },\n  response: {\n    status: 200, // default is 200\n    body: {\n      message: 'hello world'\n    }\n  }\n}\n"
  },
  {
    "path": "packages/core/test/agrees/hoge/fuga/request.json",
    "content": "{\n}\n"
  },
  {
    "path": "packages/core/test/agrees/index.js",
    "content": "module.exports = [\"./hoge/foo.json\", \"./foo/bar.yaml\"];\n"
  },
  {
    "path": "packages/core/test/agrees/notify.js",
    "content": "module.exports = [\n  {\n    request: {\n      path: \"/messages\",\n      method: \"POST\",\n      body: {\n        message: \"{:message}\",\n      },\n      values: {\n        message: \"test\",\n      },\n    },\n    response: {\n      body: {\n        result: \"{:message}\",\n      },\n      values: {\n        message: \"test\",\n      },\n      notify: {\n        event: \"message2\",\n        body: {\n          message: \"message! {:message}\",\n        },\n      },\n    },\n  },\n  {\n    request: {\n      path: \"/messages2\",\n      method: \"POST\",\n      body: {\n        message: \"{:message}\",\n      },\n      values: {\n        message: \"test\",\n      },\n    },\n    response: {\n      body: {\n        result: \"{:message}\",\n      },\n      values: {\n        message: \"test\",\n      },\n      notify: {\n        body: {\n          message: \"message2 {:message}\",\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/core/test/agrees/qux/request.json",
    "content": "{\n  path: '/qux/fuga',\n  method: 'DELETE',\n}\n"
  },
  {
    "path": "packages/core/test/agrees/qux/response.json",
    "content": "{\n  status: 204,\n}\n"
  },
  {
    "path": "packages/core/test/agrees/schema/hi.json",
    "content": "{\n  type: 'object',\n  properties: {\n    result: {\n      type: 'string'\n    }\n  },\n}\n"
  },
  {
    "path": "packages/core/test/agrees/sub.js",
    "content": "module.exports = (a, b) => a - b;\n"
  },
  {
    "path": "packages/core/test/helper/espowerLoader.js",
    "content": "require(\"espower-loader\")({\n  cwd: process.cwd(),\n  pattern: \"test/**/*.js\",\n});\n"
  },
  {
    "path": "packages/core/test/helper/server.js",
    "content": "\"use strict\";\n\nconst express = require(\"express\");\nconst bodyParser = require(\"body-parser\");\nconst Agreed = require(\"../../index\");\nconst agreed = new Agreed();\nconst app = express();\n\nmodule.exports = (opts) => {\n  app.use(bodyParser.json());\n  app.use(agreed.middleware(opts));\n  app.use((err, req, res, next) => {\n    res.statusCode = 500;\n    res.send(`Error is occurred : ${err}`);\n  });\n  return app.listen(opts.port);\n};\n"
  },
  {
    "path": "packages/core/test/helper/server.notify.js",
    "content": "\"use strict\";\n\nconst express = require(\"express\");\nconst bodyParser = require(\"body-parser\");\nconst Agreed = require(\"../../index\");\nconst agreed = new Agreed();\nconst app = express();\n\nmodule.exports = (opts) => {\n  app.use(bodyParser.json());\n  app.use(agreed.middleware(opts));\n  app.use((err, req, res, next) => {\n    res.statusCode = 500;\n    res.send(`Error is occurred : ${err}`);\n  });\n  return { server: app.listen(opts.port), notifier: agreed.server.notifier };\n};\n"
  },
  {
    "path": "packages/core/test/lib/check/checker.checkNullish.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst checker = require(`${process.cwd()}/lib/check/checker`);\nconst assert = require(\"power-assert\");\n\ntest('checker[checkNullish]: check type { key: \"foo\" }, { key: \"bar\" } doest not have error ', () => {\n  const obj1 = {\n    key: \"foo\"\n  };\n\n  const obj2 = {\n    key: \"bar\"\n  };\n\n  assert(checker.checkNullish(obj1, obj2).error === undefined);\n});\n\ntest('checker[checkNullish]: check type { key: \"undefined\" }, { key: \"foo\" } has error because undefined is nullish  ', () => {\n  const obj1 = {\n    key: \"undefined\"\n  };\n\n  const obj2 = {\n    key: \"foo\"\n  };\n\n  assert(\n    checker.checkNullish(obj1, obj2).error ===\n      \"Request value has nullish strings undefined in key\"\n  );\n});\n\ntest('checker[checkNullish]: check type { key: \"null\" }, { key: \"foo\" } has error because null is nullish  ', () => {\n  const obj1 = {\n    key: \"null\"\n  };\n\n  const obj2 = {\n    key: \"foo\"\n  };\n\n  assert(\n    checker.checkNullish(obj1, obj2).error ===\n      \"Request value has nullish strings null in key\"\n  );\n});\n\ntest('checker[checkNullish]: check type { key: \"123\" }, { key: 1 } does not have error', () => {\n  const obj1 = {\n    key: \"123\"\n  };\n\n  const obj2 = {\n    key: 1\n  };\n\n  assert(checker.checkNullish(obj1, obj2).error === undefined);\n});\n\ntest('checker[checkNullish]: check type { key: 1 }, { key: \"3\" } does not have error ', () => {\n  const obj1 = {\n    key: 1\n  };\n\n  const obj2 = {\n    key: \"3\"\n  };\n\n  assert(checker.checkNullish(obj1, obj2).error === undefined);\n});\n\ntest(\"checker[checkNullish]: check nested type does not have error \", () => {\n  const obj1 = {\n    key: {\n      foo: \"test\"\n    }\n  };\n\n  const obj2 = {\n    foo: \"hoge\"\n  };\n\n  assert(checker.checkNullish(obj1, obj2).error === undefined);\n});\n\ntest(\"checker[checkNullish]: check nested type does not have error \", () => {\n  const obj1 = {\n    key: {\n      foo: {\n        bar: \"null\"\n      }\n    }\n  };\n\n  const obj2 = {\n    bar: \"hoge\"\n  };\n\n  assert(\n    checker.checkNullish(obj1, obj2).error ===\n      \"Request value has nullish strings null in bar\"\n  );\n});\n"
  },
  {
    "path": "packages/core/test/lib/check/diff.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst diff = require(`${process.cwd()}/lib/check/diff`);\nconst assert = require(\"power-assert\");\n\ntest(\"diff: check object is equal\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: 1\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: \"aaa\",\n    ghi: 1,\n    jkl: \"aaaaa\"\n  };\n\n  const d = diff(small, large);\n  assert.deepEqual(d, {});\n});\n\ntest(\"diff: check object not equality\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: 1\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: \"aaa\",\n    ghi: 2,\n    jkl: \"aaaaa\"\n  };\n\n  const d = diff(small, large);\n  assert.deepEqual(d, { ghi: [1, 2] });\n});\n\ntest(\"diff: check object not deep equality\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    hoge: \"{:aaa}\",\n    fuga: \"{:aaa}\",\n    ghi: 1,\n    foo: {\n      aa: \"123\",\n      b: {\n        fff: {\n          a: \"hello {:aa}\"\n        }\n      }\n    }\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: \"aaa\",\n    fuga: {\n      abc: \"123\"\n    },\n    ghi: 2,\n    jkl: \"aaaaa\",\n    foo: {\n      aa: \"123\",\n      b: {\n        fff: \"aaa\"\n      }\n    }\n  };\n\n  const d = diff(small, large);\n  assert.deepEqual(d, {\n    hoge: [\"{:aaa}\", undefined],\n    ghi: [1, 2],\n    foo: {\n      b: {\n        fff: [\n          {\n            a: \"hello {:aa}\"\n          },\n          \"aaa\"\n        ]\n      }\n    }\n  });\n});\n\ntest(\"diff: check object\", () => {\n  const small = {\n    abc: \"abc {:test}\",\n    def: \"{:aaa}\",\n    ghi: 1\n  };\n\n  const large = {\n    abc: \"aaa test\",\n    def: \"aaa\",\n    ghi: \"aaaaa\"\n  };\n\n  const d = diff(small, large);\n  assert.deepEqual(d, {\n    abc: [\"abc {:test}\", \"aaa test\"],\n    ghi: [1, \"aaaaa\"]\n  });\n});\n\ntest(\"diff: check rest array string\", () => {\n  const small = {\n    abc: \"abc {:test}\",\n    def: \"{:aaa}\",\n    ghi: [\n      {\n        a: \"{:ghi.0.a}\",\n        c: \"{:ghi.0.c}\",\n        e: \"{:ghi.0.e}\"\n      },\n      \"{:ghi.1-last}\"\n    ]\n  };\n\n  const large = {\n    abc: \"abc test\",\n    def: \"aaa\",\n    ghi: [\n      {\n        a: \"b\",\n        c: \"d\",\n        e: \"e\"\n      }\n    ]\n  };\n\n  const d = diff(small, large);\n  assert.deepEqual(d, {});\n});\n\ntest(\"diff: check value included null\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: 1\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: null,\n    ghi: 1\n  };\n\n  const d = diff(small, large);\n  assert.deepEqual(d, {});\n});\n"
  },
  {
    "path": "packages/core/test/lib/check/isInclude.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst isInclude = require(`${process.cwd()}/lib/check/isInclude`);\nconst assert = require(\"power-assert\");\n\ntest(\"isInclude: check object is include\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: 1\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: \"aaa\",\n    ghi: 1,\n    jkl: \"aaaaa\"\n  };\n\n  const is = isInclude(small, large);\n  assert(is);\n});\n\ntest(\"isInclude: check nested object is include\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: \"{:hoo}\"\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: { a: \"123\" },\n    ghi: 1,\n    jkl: \"aaaaa\"\n  };\n\n  const is = isInclude(small, large);\n  assert(is);\n});\n\ntest(\"isInclude: check nested array is include\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: \"{:hoo}\",\n    jkl: \"{:array}\"\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: { a: \"123\" },\n    ghi: 1,\n    jkl: []\n  };\n\n  const is = isInclude(small, large);\n  assert(is);\n});\n\ntest(\"isInclude: check large value is empty string\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: \"{:hoo}\",\n    jkl: \"{:array}\"\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: { a: \"123\" },\n    ghi: 0,\n    jkl: \"\"\n  };\n\n  const is = isInclude(small, large);\n  assert(is);\n});\n\ntest(\"isInclude: false, check large value is empty string\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: \"{:hoo}\",\n    jkl: \"{:array}\"\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: { a: \"123\" },\n    ghi: null,\n    jkl: undefined\n  };\n\n  const is = isInclude(small, large);\n  assert(!is);\n});\n\ntest(\"isInclude: check small value is null & large value is null\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: \"{:hoo}\",\n    jkl: null\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: { a: \"123\" },\n    ghi: \"\",\n    jkl: null\n  };\n\n  const is = isInclude(small, large);\n  assert(is);\n});\n\ntest(\"isInclude: check small value is null & large value is undefined\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: \"{:hoo}\",\n    jkl: null\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: { a: \"123\" },\n    ghi: \"\"\n    // jkl is undefined\n  };\n\n  const is = isInclude(small, large);\n  assert(is);\n});\n\ntest(\"isInclude: false, check small value is null & large value is empty string\", () => {\n  const small = {\n    abc: \"abc\",\n    def: \"{:aaa}\",\n    ghi: \"{:hoo}\",\n    jkl: null\n  };\n\n  const large = {\n    abc: \"abc\",\n    def: { a: \"123\" },\n    ghi: \"\",\n    jkl: \"\"\n  };\n\n  const is = isInclude(small, large);\n  assert(!is);\n});\n"
  },
  {
    "path": "packages/core/test/lib/check/schema.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst schemaValidator = require(`${process.cwd()}/lib/check/schemaValidator`);\nconst assert = require(\"power-assert\");\n\ntest(\"schema: check object is satisfied type\", () => {\n  const object = {\n    abc: \"abc\",\n    def: \"def\",\n    ghi: 1\n  };\n\n  const schema = {\n    type: \"object\",\n    properties: {\n      abc: {\n        type: \"string\"\n      },\n      def: {\n        type: \"string\"\n      },\n      ghi: {\n        type: \"number\"\n      }\n    }\n  };\n\n  const result = schemaValidator(object, schema);\n  assert(result.errors.length === 0);\n});\n\ntest(\"schema: check object is not satisfied type\", () => {\n  const object = {\n    abc: \"abc\",\n    def: \"def\",\n    ghi: \"1\"\n  };\n\n  const schema = {\n    type: \"object\",\n    properties: {\n      abc: {\n        type: \"string\"\n      },\n      def: {\n        type: \"string\"\n      },\n      ghi: {\n        type: \"number\"\n      }\n    }\n  };\n\n  const result = schemaValidator(object, schema);\n  assert(result.errors.length === 1);\n  assert(result.errors[0].stack === \"instance.ghi is not of a type(s) number\");\n});\n"
  },
  {
    "path": "packages/core/test/lib/client.broken.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst Client = require(`${process.cwd()}/lib/client.js`);\nconst test = require(\"eater/runner\").test;\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\nconst isEmpty = require(\"is-empty\");\n\ntest(\"feat(client): check broken response - 1\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/content\",\n        },\n        response: {\n          status: 204,\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const client = new Client({\n      agrees: [\n        {\n          request: {\n            path: \"/content\",\n          },\n          response: {\n            body: {\n              id: 1,\n            },\n          },\n        },\n      ],\n      port: server.address().port,\n    });\n\n    const agrees = client.getAgreement();\n\n    const requests = client.createRequests(agrees);\n    let finishedCount = 0;\n    requests.map((request, i) => {\n      request.end();\n      request.on(\n        \"response\",\n        mustCall((response) => {\n          client.checkResponse(response, agrees[i]).on(\n            \"result\",\n            mustCall((result) => {\n              assert(result.error.length > 0);\n              finishedCount++;\n              if (finishedCount === requests.length) {\n                server.close();\n              }\n            })\n          );\n        })\n      );\n    });\n  });\n});\n\ntest(\"feat(client): check broken response - 2\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/content\",\n        },\n        response: {\n          headers: {\n            \"Content-Type\": \"application/octet-stream\",\n          },\n          body: \"{broken:'json'\",\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const client = new Client({\n      agrees: [\n        {\n          request: {\n            path: \"/content\",\n          },\n          response: {\n            body: {\n              id: 1,\n            },\n          },\n        },\n      ],\n      port: server.address().port,\n    });\n\n    const agrees = client.getAgreement();\n\n    const requests = client.createRequests(agrees);\n    let finishedCount = 0;\n    requests.map((request, i) => {\n      request.end();\n      request.on(\n        \"response\",\n        mustCall((response) => {\n          client.checkResponse(response, agrees[i]).on(\n            \"result\",\n            mustCall((result) => {\n              assert(result.error.length > 0);\n              finishedCount++;\n              if (finishedCount === requests.length) {\n                server.close();\n              }\n            })\n          );\n        })\n      );\n    });\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/client.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst Client = require(`${process.cwd()}/lib/client.js`);\nconst test = require(\"eater/runner\").test;\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\nconst isEmpty = require(\"is-empty\");\nconst { ClientRequest } = require(\"http\");\n\ntest(\"feat(client): support single agree file\", () => {\n  const client = new Client({\n    path: \"test/agrees/hoge/foo.json\",\n  });\n\n  const agrees = client.getAgreement();\n\n  assert(Array.isArray(agrees));\n});\n\ntest(\"feat(client): check setup\", () => {\n  const client = new Client({\n    path: \"test/agrees/hoge/foo.json\",\n  });\n  const agrees = client.getAgreement();\n  agrees.forEach((agree) => {\n    const { options, content, contentLength } = client.setup(agree);\n    assert.deepEqual(options, {\n      path: \"/hoge/foo\",\n      method: \"POST\",\n      headers: { \"Content-Length\": 23, \"Content-Type\": \"application/json\" },\n      host: \"localhost\",\n      port: 80,\n    });\n    assert.equal(content, '{\"message\":\"foobarbaz\"}');\n    assert.equal(contentLength, 23);\n  });\n});\n\ntest(\"feat(client): check createRequest\", () => {\n  const client = new Client({\n    path: \"test/agrees/hoge/foo.json\",\n  });\n  const agrees = client.getAgreement();\n  agrees.forEach((agree) => {\n    const setting = client.setup(agree);\n    const request = client.createRequest(setting);\n    request.abort();\n    assert(request instanceof ClientRequest);\n  });\n});\n\ntest(\"feat(client): check createRequests\", () => {\n  const client = new Client({\n    path: \"test/agrees/hoge/foo.json\",\n  });\n  const agrees = client.getAgreement();\n  const requests = client.createRequests(agrees);\n  requests.forEach((request) => {\n    request.abort();\n    assert(request instanceof ClientRequest);\n  });\n});\n\ntest(\"feat(client): check request to server\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.js\",\n    port: 0,\n  });\n  server.on(\"listening\", () => {\n    const client = new Client({\n      path: \"test/agrees/agrees.js\",\n      port: server.address().port,\n    });\n\n    const agrees = client.getAgreement();\n\n    const requests = client.createRequests(agrees);\n    let finishedCount = 0;\n    requests.map((request, i) => {\n      request.end();\n      request.on(\n        \"response\",\n        mustCall((response) => {\n          client.checkResponse(response, agrees[i]).on(\n            \"result\",\n            mustCall((result) => {\n              if (Object.keys(result.diff).length > 0) {\n                assert(result.body, \"Agree Not Found\");\n                assert(result.diff.status, [200, 404]);\n              } else {\n                assert(isEmpty(result.diff));\n              }\n              finishedCount++;\n              if (finishedCount === requests.length) {\n                server.close();\n              }\n            })\n          );\n        })\n      );\n    });\n  });\n});\n\ntest(\"client: add status-diff to result.diff when response-status is different\", () => {\n  const agree = (status) => {\n    return {\n      request: {\n        path: \"/api/sample/:id\",\n        method: \"PUT\",\n        body: [{ value: \"test\" }],\n        values: {\n          id: 1,\n        },\n      },\n      response: {\n        status,\n      },\n    };\n  };\n  const serverResponseStatus = 204;\n  const invalidClientExpectedStatus = 200;\n  const server = agreedServer({\n    port: 0,\n    agrees: [agree(serverResponseStatus)],\n  });\n  server.on(\"listening\", () => {\n    const client = new Client({\n      port: server.address().port,\n      agrees: [agree(invalidClientExpectedStatus)],\n    });\n\n    const agrees = client.getAgreement();\n\n    const requests = client.createRequests(agrees);\n    requests.map((request, i) => {\n      request.end();\n      request.on(\n        \"response\",\n        mustCall((response) => {\n          client.checkResponse(response, agrees[i]).on(\n            \"result\",\n            mustCall((result) => {\n              assert(result.diff.status);\n              assert.deepEqual(result.diff.status, [\n                invalidClientExpectedStatus,\n                serverResponseStatus,\n              ]);\n              server.close();\n            })\n          );\n        })\n      );\n    });\n  });\n});\n\ntest(\"feat(client): use specified content-type header\", () => {\n  const boundary = \"------------------------cafebabe\";\n  const contentType = `multipart/form-data; boundary=${boundary}`;\n  const agree = {\n    request: {\n      path: \"/api/csv/import\",\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": contentType,\n      },\n      body: \"\",\n    },\n    response: {\n      status: 200,\n    },\n  };\n  const client = new Client({ agrees: [agree] });\n  const agrees = client.getAgreement();\n  const { options } = client.setup(agrees[0]);\n\n  assert(options.headers);\n  assert.equal(\n    Object.keys(options.headers)\n      .map((v) => v.toLowerCase())\n      .filter((v) => v === \"content-type\").length,\n    1\n  );\n  assert.equal(options.headers[\"Content-Type\"], contentType);\n});\n\ntest(\"feat(client): support single agree ts file\", () => {\n  const client = new Client({\n    path: \"test/agrees/agrees.ts\",\n  });\n\n  const agrees = client.getAgreement();\n\n  assert(Array.isArray(agrees));\n});\n\ntest(\"fix(client): send null when body is null\", () => {\n  const agree = {\n    request: {\n      path: \"/foo\",\n      method: \"GET\",\n      body: null,\n    },\n    response: {\n      status: 200,\n    },\n  };\n  const client = new Client({ agrees: [agree] });\n  const agrees = client.getAgreement();\n  const { content } = client.setup(agrees[0]);\n\n  assert.equal(content, null);\n});\n"
  },
  {
    "path": "packages/core/test/lib/middleware.js",
    "content": "\"use strict\";\n\nconst Server = require(`${process.cwd()}/lib/server.js`);\n\nconst AssertStream = require(\"assert-stream\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"feat(middleware): http GET API\", () => {\n  const agreedServer = new Server({ path: \"test/agrees/agrees.js\" });\n  const server = http\n    .createServer((req, res) => {\n      agreedServer.useMiddleware(req, res);\n    })\n    .listen(0);\n\n  server.on(\"listening\", () => {\n    const port = server.address().port;\n    http.get(\"http://localhost:\" + port + \"/hoge/fuga?q=foo\", (res) => {\n      const assert = new AssertStream();\n      assert.expect({ message: \"hello world\" });\n      res.pipe(assert);\n      server.close();\n    });\n  });\n});\n\ntest(\"feat(middleware): http PORT API\", (done) => {\n  const agreedServer = new Server({ path: \"test/agrees/agrees.js\" });\n  const server = http\n    .createServer((req, res) => {\n      agreedServer.useMiddleware(req, res);\n    })\n    .listen(0);\n\n  server.on(\"listening\", () => {\n    const port = server.address().port;\n    const postData = JSON.stringify({\n      message: \"foobarbaz\",\n      abc: \"foobarbaz\",\n    });\n    const options = {\n      host: \"localhost\",\n      method: \"POST\",\n      path: \"/hoge/abc\",\n      port: port,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": Buffer.byteLength(postData),\n      },\n    };\n    const req = http.request(options, (res) => {\n      const assert = new AssertStream();\n      assert.expect({ message: \"hello post\" });\n      res.pipe(assert);\n      server.close();\n    });\n\n    req.write(postData);\n    req.end();\n  });\n});\n\ntest(\"error (middleware): http GET 404 API when nullish\", (done) => {\n  const agreedServer = new Server({ path: \"test/agrees/agrees.js\" });\n  const server = http\n    .createServer((req, res) => {\n      agreedServer.useMiddleware(req, res);\n    })\n    .listen(0);\n\n  server.on(\"listening\", () => {\n    const port = server.address().port;\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/headers/null\",\n      port: port,\n    };\n    const req = http.request(options, (res) => {\n      server.close();\n      assert(res.statusCode === 404);\n      let content = \"\";\n      res.on(\"data\", (chunk) => (content += chunk));\n      res.on(\"end\", () => console.log(content));\n    });\n\n    req.end();\n  });\n});\n\ntest(\"error (middleware): http GET 404 API when nullish headers\", (done) => {\n  const agreedServer = new Server({ path: \"test/agrees/agrees.js\" });\n  const server = http\n    .createServer((req, res) => {\n      agreedServer.useMiddleware(req, res);\n    })\n    .listen(0);\n\n  server.on(\"listening\", () => {\n    const port = server.address().port;\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/headers/test/1\",\n      headers: {\n        \"x-test-token\": \"null\",\n      },\n      port: port,\n    };\n    const req = http.request(options, (res) => {\n      server.close();\n      assert(res.statusCode === 404);\n      let content = \"\";\n      res.on(\"data\", (chunk) => (content += chunk));\n      res.on(\"end\", () => console.log(content));\n    });\n\n    req.end();\n  });\n});\n\ntest(\"feat(middleware): http notfound called next\", (done) => {\n  const agreedServer = new Server({\n    path: \"test/agrees/agrees.js\",\n    callNextWhenNotFound: true,\n  });\n  const server = http\n    .createServer((req, res) => {\n      agreedServer.useMiddleware(\n        req,\n        res,\n        mustCall(() => {\n          done();\n        })\n      );\n    })\n    .listen(0);\n\n  server.on(\"listening\", () => {\n    const port = server.address().port;\n    http.get(\"http://localhost:\" + port + \"/foobarbaz\");\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.arrayreqs.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check custom function\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/arrayreqs/agreed/values\",\n          query: {\n            \"year_months[]\": \"{:yearMonths}\",\n          },\n        },\n        response: {\n          body: \"{arraify:yearMonths}\",\n          funcs: {\n            arraify: (yearMonths) =>\n              yearMonths.map((yearMonth) => yearMonth.substring(0, 4)),\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/arrayreqs/agreed/values?year_months[]=201708&year_months[]=201709&year_months[]=201810\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.deepStrictEqual(result, [\"2017\", \"2017\", \"2018\"]);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.arraysWithNull.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check headers when case insensitive\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/null/agreed/values\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(\n        options,\n        mustCall((res) => {\n          let data = \"\";\n          res.on(\"data\", (d) => (data += d));\n          res.on(\n            \"end\",\n            mustCall(() => {\n              const actual = JSON.parse(data);\n              const expected = {\n                messages: [{ message: null }, { message: \"test\" }],\n              };\n              assert.deepStrictEqual(actual, expected);\n            })\n          );\n          server.close();\n        })\n      )\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.bodyHasNull.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst { test } = require(\"eater/runner\");\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check post to list\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const body = {\n      test: null,\n    };\n    const bodyString = JSON.stringify(body);\n    const options = {\n      host: \"localhost\",\n      method: \"POST\",\n      path: \"/test/agreed/use/null/obj\",\n      port: server.address().port,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": bodyString.length,\n      },\n    };\n    const req = http\n      .request(\n        options,\n        mustCall((res) => {\n          let data = \"\";\n          res.on(\"data\", (d) => (data += d));\n          res.on(\n            \"end\",\n            mustCall(() => {\n              const actual = JSON.parse(data);\n              const expected = { results: null };\n              assert.deepStrictEqual(actual, expected);\n            })\n          );\n          server.close();\n        })\n      )\n      .on(\"error\", console.error);\n\n    req.write(bodyString);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.checkHeadersCaseInsensitive.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst plzPort = require(\"plz-port\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check headers when case insensitive\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/case/insensitive/headers\",\n      port: server.address().port,\n      headers: {\n        \"This-Headers-Should-Be-Lower-Case\": \"true\",\n      },\n    };\n    const req = http\n      .request(options, (res) => {\n        const assert = new AssertStream();\n        assert.expect({ message: \"hello case insensitive headers\" });\n        res.pipe(assert);\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check headers when case insensitive\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/case/insensitive/headers\",\n      port: server.address().port,\n      headers: {\n        \"THIS-HEADERS-SHOULD-BE-LOWER-CASE\": \"true\",\n      },\n    };\n    const req = http\n      .request(options, (res) => {\n        const assert = new AssertStream();\n        assert.expect({ message: \"hello case insensitive headers\" });\n        res.pipe(assert);\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.customFuncs.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check custom function\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/custom/agreed/values\",\n          query: {\n            a: \"{:a}\",\n            b: \"{:b}\",\n            c: \"{:c}\",\n          },\n          values: {\n            a: 1,\n            b: 2,\n            c: 3,\n          },\n        },\n        response: {\n          body: {\n            sum: \"{sum:a,b,c}\",\n          },\n          funcs: {\n            sum: (a, b, c) => parseInt(a) + parseInt(b) + parseInt(c),\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/custom/agreed/values?a=1&b=2&c=3\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.sum, 6);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check custom function with array response\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/custom/agreed/values\",\n          query: {\n            a: \"{:a}\",\n            b: \"{:b}\",\n            c: \"{:c}\",\n          },\n          values: {\n            a: 1,\n            b: 2,\n            c: 3,\n          },\n        },\n        response: {\n          body: {\n            sum: \"{sum:a,b,c}\",\n          },\n          funcs: {\n            sum: (a, b, c) => {\n              var A = parseInt(a);\n              var B = parseInt(b);\n              var C = parseInt(c);\n              return [A + B + C, A * B * C, A - B - C];\n            },\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/custom/agreed/values?a=1&b=2&c=3\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.deepStrictEqual(result.sum, [6, 6, -4]);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.emptyHeaderValue.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check empty-header-value skip\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n    ],\n    port: 0,\n    skipCheckHeaderValueNullable: true,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1\",\n      port: server.address().port,\n      headers: {\n        \"empty-header\": \"\",\n      },\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            try {\n              const result = JSON.parse(data);\n              assert.strictEqual(result.id, 1);\n            } catch (e) {\n              console.error();\n            }\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check empty-header-value fail\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n    ],\n    port: 0,\n    skipCheckHeaderValueNullable: false,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1\",\n      port: server.address().port,\n      headers: {\n        \"empty-header\": \"\",\n      },\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            try {\n              const result = JSON.parse(data);\n              assert.fail(\"shoul not be reached here.\");\n            } catch (e) {\n              // noop.\n            }\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst plzPort = require(\"plz-port\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\nconst ts = require(\"typescript\");\n\ntest(\"server: POST API\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"foobarbaz\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/hoge/abc\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          const assert = new AssertStream();\n          assert.expect({ message: \"hello post\" });\n          res.pipe(assert);\n          server.close();\n        })\n        .on(\"error\", console.error);\n\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: PUT API\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        a: \"b\",\n        c: \"d\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"PUT\",\n        path: \"/foo/aaa\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          const assert = new AssertStream();\n          assert.expect(\"hello put\");\n          res.pipe(assert);\n          server.close();\n        })\n        .on(\"error\", console.error);\n\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: DELETE API\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.json5\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const options = {\n        host: \"localhost\",\n        method: \"DELETE\",\n        path: \"/qux/fuga\",\n        port: port,\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 204);\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: GET with :id \", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const options = {\n        host: \"localhost\",\n        method: \"GET\",\n        path: \"/path/fuga\",\n        port: port,\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 200);\n          const assertStream = new AssertStream();\n          assertStream.expect({ message: \"hello fuga\" });\n          res.pipe(assertStream);\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: POST with :id \", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"foobarbaz\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/path/fuga?meta=fooo\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 200);\n          const assertStream = new AssertStream();\n          assertStream.expect({ message: \"hello fuga, fooo, foobarbaz\" });\n          res.pipe(assertStream);\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: check response when expect is filled\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"foobarbaz\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/embed/from/response/fuga?meta=true\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 200);\n          const assertStream = new AssertStream();\n          assertStream.expect({\n            message: \"hello fuga true foobarbaz\",\n            image:\n              \"http://imgfp.hotp.jp/SYS/cmn/images/front_002/logo_hotopepper_264x45.png\",\n            topics: [\n              {\n                a: \"a\",\n              },\n              {\n                b: \"b\",\n              },\n            ],\n          });\n          res.pipe(assertStream);\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: check response when header values are exists\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const options = {\n        host: \"localhost\",\n        method: \"GET\",\n        path: \"/headers/2/\",\n        port: port,\n        headers: {\n          \"x-token\": \"abcdefghi\",\n          \"x-api-key\": \"123456789\",\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 200);\n          const assertStream = new AssertStream();\n          assertStream.expect({\n            result: \"dunke abcdefghi 123456789\",\n          });\n          res.pipe(assertStream);\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: response header has format string\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.json5\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const options = {\n        host: \"localhost\",\n        method: \"GET\",\n        path: \"/path/header/format\",\n        port: port,\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 200);\n          assert(res.headers[\"access-control-allow-origin\"] === \"*\");\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: response header using default response headers\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.json5\",\n      port: port,\n      defaultResponseHeaders: {\n        \"access-control-allow-origin\": \"test\",\n      },\n    });\n\n    server.on(\"listening\", () => {\n      const options = {\n        host: \"localhost\",\n        method: \"GET\",\n        path: \"/path/default/header/\",\n        port: port,\n      };\n      const req = http\n        .request(\n          options,\n          mustCall((res) => {\n            assert(res.statusCode === 200);\n            assert(res.headers[\"access-control-allow-origin\"] === \"test\");\n            server.close();\n          })\n        )\n        .on(\"error\", console.error);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: response header using default request headers\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.json5\",\n      port: port,\n      defaultRequestHeaders: {\n        \"x-forwarded-for\": \"forward\",\n      },\n    });\n\n    server.on(\"listening\", () => {\n      const options = {\n        host: \"localhost\",\n        method: \"GET\",\n        path: \"/path/default/request/header/\",\n        port: port,\n        headers: {\n          \"x-forwarded-for\": \"forward\",\n        },\n      };\n      const req = http\n        .request(\n          options,\n          mustCall((res) => {\n            assert(res.statusCode === 200);\n            const assertStream = new AssertStream();\n            assertStream.expect({\n              message: \"forward\",\n            });\n            res.pipe(assertStream);\n            server.close();\n          })\n        )\n        .on(\"error\", console.error);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: POST API with ts agrees\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.ts\",\n      port: port,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"test\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/ts-messages\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          const assert = new AssertStream();\n          assert.expect({ result: \"test\" });\n          res.pipe(assert);\n          server.close();\n        })\n        .on(\"error\", console.error);\n\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: POST with :id (when enable-prefer-query option is true)\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n      enablePreferQuery: true,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"foobarbaz\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/path/fuga?meta=fooo\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 404);\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: check response when expect is filled (when enable-prefer-query option is true)\", () => {\n  plzPort().then((port) => {\n    const server = agreedServer({\n      path: \"test/agrees/agrees.js\",\n      port: port,\n      enablePreferQuery: true,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"foobarbaz\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/embed/from/response/fuga?meta=true\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          assert(res.statusCode === 404);\n          server.close();\n        })\n        .on(\"error\", console.error);\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.messages.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst { test } = require(\"eater/runner\");\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check post to list\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const body = {\n      messages: [{ message: \"hoge\" }],\n    };\n    const bodyString = JSON.stringify(body);\n    const options = {\n      host: \"localhost\",\n      method: \"POST\",\n      path: \"/test/agreed/messages\",\n      port: server.address().port,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": bodyString.length,\n      },\n    };\n    const req = http\n      .request(\n        options,\n        mustCall((res) => {\n          res.pipe(process.stdout);\n          let data = \"\";\n          res.on(\"data\", (d) => (data += d));\n          res.on(\n            \"end\",\n            mustCall(() => {\n              const actual = JSON.parse(data);\n              const expected = { results: body.messages };\n              assert.deepStrictEqual(actual, expected);\n            })\n          );\n          server.close();\n        })\n      )\n      .on(\"error\", console.error);\n\n    req.write(bodyString);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.nestedbind.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check parseInt\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const body = {\n      time: { start: 1, end: 3, break: { start: 2, end: 5 } },\n      members: [\n        {\n          id: 1,\n        },\n        {\n          id: 2,\n        },\n      ],\n    };\n    const bodyStr = JSON.stringify(body);\n    const options = {\n      host: \"localhost\",\n      method: \"POST\",\n      path: \"/test/bind/nest/object\",\n      port: server.address().port,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": bodyStr.length,\n      },\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            const expected = {\n              time: { start: 1, end: 3 },\n              break: { start: 2, end: 5 },\n              members: [{ id: 1 }, { id: 2 }],\n            };\n            assert.deepStrictEqual(result, expected);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.write(bodyStr);\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.notify.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.notify.js\");\nconst { test } = require(\"eater/runner\");\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check notify\", () => {\n  const { server, notifier } = agreedServer({\n    path: \"test/agrees/notify.js\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const body = { message: \"hoge\" };\n    const bodyString = JSON.stringify(body);\n    const options = {\n      host: \"localhost\",\n      method: \"POST\",\n      path: \"/messages\",\n      port: server.address().port,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": bodyString.length,\n      },\n    };\n    const req = http\n      .request(\n        options,\n        mustCall((res) => {\n          let data = \"\";\n          res.on(\"data\", (d) => (data += d));\n          res.on(\n            \"end\",\n            mustCall(() => {\n              const actual = JSON.parse(data);\n              const expected = { result: \"hoge\" };\n              assert.deepStrictEqual(actual, expected);\n            })\n          );\n          server.close();\n        })\n      )\n      .on(\"error\", console.error);\n\n    notifier.on(\n      \"message2\",\n      mustCall((actual) => {\n        const expected = { message: \"message! hoge\" };\n        assert.deepStrictEqual(actual, expected);\n      })\n    );\n\n    req.write(bodyString);\n\n    req.end();\n  });\n});\n\ntest(\"server: check notify default message\", () => {\n  const { server, notifier } = agreedServer({\n    path: \"test/agrees/notify.js\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const body = { message: \"hoge\" };\n    const bodyString = JSON.stringify(body);\n    const options = {\n      host: \"localhost\",\n      method: \"POST\",\n      path: \"/messages2\",\n      port: server.address().port,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": bodyString.length,\n      },\n    };\n    const req = http\n      .request(\n        options,\n        mustCall((res) => {\n          let data = \"\";\n          res.on(\"data\", (d) => (data += d));\n          res.on(\n            \"end\",\n            mustCall(() => {\n              const actual = JSON.parse(data);\n              const expected = { result: \"hoge\" };\n              assert.deepStrictEqual(actual, expected);\n            })\n          );\n          server.close();\n        })\n      )\n      .on(\"error\", console.error);\n\n    notifier.on(\n      \"message\",\n      mustCall((actual) => {\n        const expected = { message: \"message2 hoge\" };\n        assert.deepStrictEqual(actual, expected);\n      })\n    );\n\n    req.write(bodyString);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.parseInt.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check parseInt\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/parseint/agreed/values/1000\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.deepStrictEqual(result.id, 1000);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.path.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\n\ntest(\"server: `path` option can be directory index\", () => {\n  const server = agreedServer({\n    path: \"test/agrees\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const postData = JSON.stringify({\n      message: \"foobarbaz\",\n    });\n    const options = {\n      host: \"localhost\",\n      method: \"POST\",\n      path: \"/hoge/abc\",\n      port: server.address().port,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": Buffer.byteLength(postData),\n      },\n    };\n    const req = http\n      .request(options, (res) => {\n        const assert = new AssertStream();\n        assert.expect({ message: \"hello post\" });\n        res.pipe(assert);\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.write(postData);\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.pathParam.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check path params priority - 1\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 3,\n          },\n        },\n        response: {\n          body: {\n            id: 3,\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.id, 1);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check path params priority - 2\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 3,\n          },\n        },\n        response: {\n          body: {\n            id: 3,\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/2\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.id, 2);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check path params priority - 3\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 3,\n          },\n        },\n        response: {\n          body: {\n            id: 3,\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/3\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.id, 3);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check path params priority - 4\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:foo/:bar\",\n          values: {\n            foo: 1,\n            bar: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/1/3\",\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1/2\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.id, 1);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check path params priority - 5\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:foo/:bar\",\n          values: {\n            foo: 1,\n            bar: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/1/3\",\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1/3\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.id, 2);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.randomInt.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check randomInt\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/randomint/agreed/values\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert(result.random >= 0);\n            assert(result.random < 1000);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.randomString.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check randomString\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/randomstring/agreed/values\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert(typeof result.random === \"string\");\n            assert(result.random.length === 8);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.statusTemplate.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check status template\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/custom/agreed/status\",\n          query: {\n            status: \"{:status}\",\n          },\n        },\n        response: {\n          status: \"{:status}\",\n          body: \"OK\",\n        },\n      },\n    ],\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/custom/agreed/status?status=404\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        assert.strictEqual(res.statusCode, 404);\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            assert.strictEqual(data, '\"OK\"');\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.strict.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check strict mode - status code\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n    ],\n    port: 0,\n    strict: true,\n    hot: true,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        assert.strictEqual(res.statusCode, 500);\n        res.resume();\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check strict mode - message\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n    ],\n    port: 0,\n    strict: true,\n    hot: true,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.message, \"Ambiguous Request\");\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n\ntest(\"server: check strict mode - candidates\", () => {\n  const server = agreedServer({\n    agrees: [\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 1,\n          },\n        },\n        response: {\n          body: {\n            id: 1,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/:id\",\n          values: {\n            id: 2,\n          },\n        },\n        response: {\n          body: {\n            id: 2,\n          },\n        },\n      },\n      {\n        request: {\n          path: \"/test/agreed/3\",\n        },\n        response: {},\n      },\n    ],\n    port: 0,\n    strict: true,\n    hot: true,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/agreed/1\",\n      port: server.address().port,\n    };\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            assert.strictEqual(result.candidates.length, 2);\n          })\n        );\n\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.typedcachepath.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst http = require(\"http\");\nconst test = require(\"eater/runner\").test;\nconst AssertStream = require(\"assert-stream\");\nconst plzPort = require(\"plz-port\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\nconst os = require(\"os\");\nconst fs = require(\"fs\");\n\ntest(\"server: POST API with ts agrees using typed cache path\", () => {\n  plzPort().then((port) => {\n    const dest = `${os.tmpdir()}/agrees.ts`;\n    const cachePath = `${os.tmpdir()}/.agreed.json`;\n    fs.copyFileSync(\"test/agrees/agrees.ts\", dest);\n    const server = agreedServer({\n      path: dest,\n      port: port,\n      typedCachePath: cachePath,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"test\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/ts-messages\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          const assert = new AssertStream();\n          assert.expect({ result: \"test\" });\n          res.pipe(assert);\n          server.close();\n          process.kill(process.pid, \"SIGHUP\");\n        })\n        .on(\"error\", console.error);\n\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: POST API with ts agrees using typed cache path using cache\", () => {\n  plzPort().then((port) => {\n    const dest = `${os.tmpdir()}/agrees.ts`;\n    const cachePath = `${os.tmpdir()}/.agreed.json`;\n    const server = agreedServer({\n      path: dest,\n      port: port,\n      typedCachePath: cachePath,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"test\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/ts-messages\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          const assert = new AssertStream();\n          assert.expect({ result: \"test\" });\n          res.pipe(assert);\n          server.close();\n          process.kill(process.pid, \"SIGHUP\");\n        })\n        .on(\"error\", console.error);\n\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: POST API with ts agrees using typed cache path using cache\", () => {\n  plzPort().then((port) => {\n    const dest = `${os.tmpdir()}/agrees.ts`;\n    const cachePath = `${os.tmpdir()}/.agreed.json`;\n    const content = `\nmodule.exports = [{\n  request: {\n    path: '/ts-messages2',\n    method: 'POST',\n    body: {\n      message: '{:message}'\n    },\n    values: {\n      message: 'test'\n    }\n  }, \n  response: {\n    body: {\n      result: '{:message}'\n    },\n    values: {\n      message: 'test'\n    },\n  },\n}];\n    `;\n    fs.writeFileSync(dest, content);\n    const server = agreedServer({\n      path: dest,\n      port: port,\n      typedCachePath: cachePath,\n    });\n\n    server.on(\"listening\", () => {\n      const postData = JSON.stringify({\n        message: \"test\",\n      });\n      const options = {\n        host: \"localhost\",\n        method: \"POST\",\n        path: \"/ts-messages2\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Content-Length\": Buffer.byteLength(postData),\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          const assert = new AssertStream();\n          assert.expect({ result: \"test\" });\n          res.pipe(assert);\n          server.close();\n          process.kill(process.pid, \"SIGHUP\");\n        })\n        .on(\"error\", console.error);\n\n      req.write(postData);\n      req.end();\n    });\n  });\n});\n\ntest(\"server: use agreed-typed fixtures\", () => {\n  plzPort().then((port) => {\n    const cachePath = `${os.tmpdir()}/.agreed.json`;\n    const server = agreedServer({\n      path: \"../typed/src/__tests__/data/agreed.ts\",\n      port: port,\n      typedCachePath: cachePath,\n    });\n\n    server.on(\"listening\", () => {\n      const options = {\n        host: \"localhost\",\n        method: \"GET\",\n        path: \"/ping/test\",\n        port: port,\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n      };\n      const req = http\n        .request(options, (res) => {\n          const assert = new AssertStream();\n          assert.expect({ message: \"ok test\" });\n          res.pipe(assert);\n          server.close();\n          process.kill(process.pid, \"SIGHUP\");\n        })\n        .on(\"error\", console.error);\n      req.end();\n    });\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/server.unixtime.js",
    "content": "\"use strict\";\n\nconst agreedServer = require(\"../helper/server.js\");\nconst test = require(\"eater/runner\").test;\nconst http = require(\"http\");\nconst AssertStream = require(\"assert-stream\");\nconst assert = require(\"power-assert\");\nconst mustCall = require(\"must-call\");\n\ntest(\"server: check unixtime\", () => {\n  const server = agreedServer({\n    path: \"test/agrees/agrees.json5\",\n    port: 0,\n  });\n\n  server.on(\"listening\", () => {\n    const options = {\n      host: \"localhost\",\n      method: \"GET\",\n      path: \"/test/unixtime/agreed/values\",\n      port: server.address().port,\n    };\n    const currentUnix = parseInt(Date.now() / 1000);\n    const req = http\n      .request(options, (res) => {\n        let data = \"\";\n        res.on(\"data\", (d) => (data += d));\n        res.on(\n          \"end\",\n          mustCall(() => {\n            const result = JSON.parse(data);\n            console.log(currentUnix);\n            console.log(result);\n            assert(result.unixtime >= currentUnix);\n          })\n        );\n        server.close();\n      })\n      .on(\"error\", console.error);\n\n    req.end();\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/template/bind.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst bind = require(`${process.cwd()}/lib/template/bind`);\nconst assert = require(\"power-assert\");\n\ntest('bind: { key: \"{:value}\" }, { key: \"foo\" } => { value: \"foo\" }', () => {\n  const result = bind({ key: \"{:value}\" }, { key: \"foo\" });\n  assert.deepEqual(result, { value: \"foo\" });\n});\n\ntest('bind: { key: { foo: \"{:value}\" }, { key: { foo: \"foo\"} } => { value: \"foo\" }', () => {\n  const result = bind({ key: { foo: \"{:value}\" } }, { key: { foo: \"foo\" } });\n  assert.deepEqual(result, { value: \"foo\" });\n});\n\ntest('bind: { key: { foo: \"{:value}\" }, { key: { foo: null } } => { value: null }', () => {\n  const result = bind({ key: { foo: \"{:value}\" } }, { key: { foo: null } });\n  assert.deepEqual(result, { value: null });\n});\n\ntest('bind: { key: { foo: \"{:value.foo}\" }, { key: { value: { foo: 12345 } } } => { value: { foo: 12345 } }', () => {\n  const result = bind(\n    { key: { foo: \"{:value.foo}\" } },\n    { key: { value: { foo: 12345 } } }\n  );\n  assert.deepEqual(result, { value: { foo: 12345 } });\n});\n\ntest('bind: { key: { foo: \"{:value.foo.bar.0.baz}\" }, { key: { value: { foo: { bar: [ { baz : 12345 } ] } } } } => { value: { foo: { bar: [ { baz: 12345 } ] } } }', () => {\n  const result = bind(\n    { key: { foo: \"{:value.foo.bar.0.baz}\" } },\n    { key: { value: { foo: { bar: [{ baz: 12345 }] } } } }\n  );\n  const expect = { value: { foo: { bar: [{ baz: 12345 }] } } };\n  assert.deepStrictEqual(result, expect);\n});\n"
  },
  {
    "path": "packages/core/test/lib/template/format.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst format = require(`${process.cwd()}/lib/template/format`);\nconst assert = require(\"power-assert\");\n\ntest(\"format: {:id} = {:aa}\", () => {\n  const result = format(\"{:id} = {:aa}\", {\n    id: \"fooo\",\n    aa: \"barrr\"\n  });\n  assert(result === \"fooo = barrr\");\n});\n\ntest(\"format: {:id.foo} = {:aa.bar}\", () => {\n  const result = format(\"{:id.foo} = {:aa.bar}\", {\n    id: {\n      foo: \"fooo\"\n    },\n    aa: {\n      bar: \"barrr\"\n    }\n  });\n  assert(result === \"fooo = barrr\");\n});\n\ntest(\"format: {:id.foo.bar} = {:aa.bar.baz}\", () => {\n  const result = format(\"{:id.foo.bar} = {:aa.bar.baz}\", {\n    id: {\n      foo: {\n        bar: \"fooo\"\n      }\n    },\n    aa: {\n      bar: {\n        baz: \"barrr\"\n      }\n    }\n  });\n  assert(result === \"fooo = barrr\");\n});\n\ntest(\"format: object format\", () => {\n  const obj = {\n    a: \"{:abc}\",\n    b: \"{:def}\",\n    c: \"{:ghi}\"\n  };\n  const result = format(obj, {\n    abc: true,\n    def: [1, 2, 3, null],\n    ghi: {\n      aaaa: \"bbb\"\n    }\n  });\n  assert.deepStrictEqual(result, {\n    a: true,\n    b: [1, 2, 3, null],\n    c: { aaaa: \"bbb\" }\n  });\n});\n\ntest(\"format: nested json and format is unmatched\", () => {\n  const obj = {\n    a: {\n      abc: \"{:abc}\"\n    },\n    b: \"{:def}\",\n    c: \"{:ghi}\"\n  };\n  const result = format(obj, {\n    id: \"fooo\",\n    aa: \"barrr\",\n    ghi: \"123\"\n  });\n  assert.deepStrictEqual(result, {\n    a: {\n      abc: \"{:abc}\"\n    },\n    b: \"{:def}\",\n    c: \"123\"\n  });\n});\n\ntest(\"format: array format\", () => {\n  const obj = {\n    a: {\n      abc: \"{:abc}\"\n    },\n    b: [1, 2, 3],\n    c: \"{:ghi}\"\n  };\n  const result = format(obj, {\n    id: \"fooo\",\n    aa: \"barrr\",\n    ghi: \"123\"\n  });\n\n  assert.deepStrictEqual(result, {\n    a: {\n      abc: \"{:abc}\"\n    },\n    b: [1, 2, 3],\n    c: \"123\"\n  });\n});\n\ntest(\"format: number format\", () => {\n  const obj = {\n    a: {\n      abc: 1\n    },\n    c: \"{:ghi}\"\n  };\n  const result = format(obj, {\n    id: \"fooo\",\n    aa: \"barrr\",\n    ghi: \"123\"\n  });\n  assert.deepStrictEqual(result, {\n    a: {\n      abc: 1\n    },\n    c: \"123\"\n  });\n});\n\ntest(\"format: brackets notation :ghi[:id]\", () => {\n  const obj = {\n    a: {\n      abc: 1\n    },\n    c: \"{:ghi[:id]}\"\n  };\n  const result = format(obj, {\n    id: \"fooo\",\n    aa: \"barrr\",\n    ghi: {\n      fooo: \"123\",\n      baaa: \"234\"\n    }\n  });\n  assert.deepStrictEqual(result, {\n    a: {\n      abc: 1\n    },\n    c: \"123\"\n  });\n});\n\ntest(\"format: brackets notation :ghi[:id][:aa]\", () => {\n  const obj = {\n    a: {\n      abc: 1\n    },\n    c: \"{:ghi[:id][:aa]}\"\n  };\n  const result = format(obj, {\n    id: \"fooo\",\n    aa: \"barrr\",\n    ghi: {\n      fooo: {\n        barrr: \"123\"\n      },\n      baaa: \"234\"\n    }\n  });\n  assert.deepStrictEqual(result, {\n    a: {\n      abc: 1\n    },\n    c: \"123\"\n  });\n});\n\ntest(\"format: brackets notation to use array\", () => {\n  const obj = {\n    a: {\n      abc: 1\n    },\n    c: \"{:ghi[:id]}\"\n  };\n  const result = format(obj, {\n    id: 1,\n    aa: \"barrr\",\n    ghi: [1, 2, 3]\n  });\n  assert.deepStrictEqual(result, {\n    a: {\n      abc: 1\n    },\n    c: 2\n  });\n});\n\ntest(\"format: array 1-last notation to spread array\", () => {\n  const obj = {\n    arr: [\n      {\n        name: \"{:ghi.0.name}\"\n      },\n      \"{:ghi.1-last}\"\n    ]\n  };\n  const result = format(obj, {\n    ghi: [\n      {\n        name: \"foo\"\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: \"baz\"\n      }\n    ]\n  });\n\n  assert.deepStrictEqual(result, {\n    arr: [\n      {\n        name: \"foo\"\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: \"baz\"\n      }\n    ]\n  });\n});\n\ntest(\"format: array 1-4 notation to spread array\", () => {\n  const obj = {\n    arr: [\n      {\n        name: \"{:ghi.0.name}\"\n      },\n      \"{:ghi.1-4}\"\n    ]\n  };\n  const result = format(obj, {\n    ghi: [\n      {\n        name: \"foo\"\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: \"baz\"\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: \"baz\"\n      }\n    ]\n  });\n\n  assert.deepStrictEqual(result, {\n    arr: [\n      {\n        name: \"foo\"\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: \"baz\"\n      },\n      {\n        name: \"bar\"\n      }\n    ]\n  });\n});\n\ntest(\"format: array 1-last notation to spread array with null\", () => {\n  const obj = {\n    arr: [\n      {\n        name: \"{:ghi.0.name}\"\n      },\n      \"{:ghi.1-last}\"\n    ]\n  };\n  const result = format(obj, {\n    ghi: [\n      {\n        name: null\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: \"baz\"\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: null\n      }\n    ]\n  });\n\n  assert.deepStrictEqual(result, {\n    arr: [\n      {\n        name: null\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: \"baz\"\n      },\n      {\n        name: \"bar\"\n      },\n      {\n        name: null\n      }\n    ]\n  });\n});\n"
  },
  {
    "path": "packages/core/test/lib/template/format.operationalKey.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst format = require(`${process.cwd()}/lib/template/format`);\nconst assert = require(\"power-assert\");\n\ntest(\"format: {randomInt:id}\", () => {\n  const result = format({ id: \"{randomInt:id}\" }, { id: \"1-10000\" });\n  assert(result.id >= 1);\n  assert(result.id <= 10000);\n});\n\ntest(\"format: {randomInt:id} but no range\", () => {\n  const result = format({ id: \"{randomInt:id}\" }, { id: 1 });\n  // default value is over 1\n  assert(result.id > 1);\n  assert(result.id <= Number.MAX_SAFE_INTEGER);\n});\n\ntest(\"format: {randomInt:id} but range 1000-100\", () => {\n  const result = format({ id: \"{randomInt:id}\" }, { id: \"1000-100\" });\n  assert(result.id >= 0);\n  assert(result.id <= 1000);\n});\n\ntest(\"format: {parseInt:id}\", () => {\n  const result = format({ id: \"{parseInt:id}\" }, { id: \"10000\" });\n  assert.deepStrictEqual(result.id, 10000);\n});\n\ntest(\"format: {unixtime:time}\", () => {\n  const unixtime = parseInt(Date.now() / 1000);\n  const result = format({ time: \"{unixtime:time}\" }, { time: \"10000\" });\n  assert(result.time >= unixtime);\n});\n\ntest(\"format: {sum:a,b}\", () => {\n  const sum = (a, b) => a + b;\n  const result = format({ sum: \"{sum:a,b}\" }, { a: 1, b: 2 }, { sum: sum });\n  assert.strictEqual(result.sum, 3);\n});\n\ntest(\"format: {sub:a,b}\", () => {\n  const result = format(\n    { sub: \"{sub:a,b}\" },\n    { a: 1, b: 2 },\n    { sub: \"./test/agrees/sub.js\", basedir: process.cwd() }\n  );\n  assert.strictEqual(result.sub, -1);\n});\n\ntest(\"format: {sub:a,b} but response is array\", () => {\n  const result = format(\n    { sub: \"{sub:a,b}\" },\n    { a: 1, b: 2 },\n    { sub: (a, b) => [a - b, a + b, a * b, a / b], basedir: process.cwd() }\n  );\n  assert.deepStrictEqual(result.sub, [-1, 3, 2, 0.5]);\n});\n\ntest(\"format: {sub:a.0,a.1}\", () => {\n  const result = format(\n    { sub: \"{sub:a.0,a.1}\" },\n    { a: [0, 4] },\n    { sub: (a, b) => a - b, basedir: process.cwd() }\n  );\n  assert.strictEqual(result.sub, -4);\n});\n"
  },
  {
    "path": "packages/core/test/lib/template/hasTemplate.js",
    "content": "\"use strict\";\n\nconst test = require(\"eater/runner\").test;\nconst assert = require(\"power-assert\");\nconst hasTemplate = require(`${process.cwd()}/lib/template/hasTemplate`)\n  .hasTemplate;\nconst hasTemplateWithAnyString = require(`${process.cwd()}/lib/template/hasTemplate`)\n  .hasTemplateWithAnyString;\n\ntest(\"hasTemplate: check template has {:id}\", () => {\n  const has = hasTemplate(\"foo {:id}\");\n  assert(has);\n});\n\ntest(\"hasTemplate: check template has not {:id}\", () => {\n  const has = hasTemplate(\"foo {id}\");\n  assert(!has);\n});\n\ntest(\"hasTemplateWithAnyString: check template has not foo {:id}\", () => {\n  const has = hasTemplateWithAnyString(\"foo {:id}\");\n  assert(has);\n});\n\ntest(\"hasTemplateWithAnyString: check template has not foo {:id}\", () => {\n  const has = hasTemplateWithAnyString(\"{:id}\");\n  assert(!has);\n});\n"
  },
  {
    "path": "packages/core/test/lib/template/toRegexp.js",
    "content": "const test = require(\"eater/runner\").test;\nconst assert = require(\"power-assert\");\nconst toRegexp = require(`${process.cwd()}/lib/template/toRegexp`);\n\ntest(\"toRegexp: template string to Regexp\", () => {\n  const regexp = toRegexp(\"foo {:id}\");\n  assert(\"foo bar baz\".match(regexp));\n});\n\ntest(\"toRegexp: template string to Regexp not match\", () => {\n  const regexp = toRegexp(\"bar {:id}\");\n  assert(\"foo bar baz\".match(regexp) === null);\n});\n\ntest(\"toRegexp: template {:foo.aaa}\", () => {\n  const regexp = toRegexp(\"foo {:id.aaa} baz\");\n  assert(\"foo bar baz\".match(regexp));\n});\n"
  },
  {
    "path": "packages/server/.gitignore",
    "content": "*.swp\nnode_modules\n.DS_Store\n"
  },
  {
    "path": "packages/server/.travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"6\"\n  - \"8\"\nscript: npm test\nsudo: false\n"
  },
  {
    "path": "packages/server/README.md",
    "content": "# Agreed Server\n[![Build Status](https://travis-ci.org/recruit-tech/agreed-server.svg?branch=add_travis)](https://travis-ci.org/recruit-tech/agreed-server)\n\n[Agreed](https://www.npmjs.com/package/agreed-core) mock server\n\n`agreed-server` is a mock server based on `agreed`.\nThis module provides CLI executable command and 2 programmable interface.\nIf you want to use `agreed` as mock, you would be better to install `agreed-server`.\n\n# Install\n\n```\n$ npm install agreed-server --save-dev\n```\n\n# Basic Usage\n\nUsage as CLI\n\n```\n$ agreed-server --path ./test/agreed.json --port 10101\n```\n\n- if you want to boot agreed server as disable hot replacement.\n\n```\n$ agreed-server --path ./test/agreed.json --port 10101 --hot false\n```\n\nUsage as programming\n\n```js\nconst agreedServer = require('agreed-server');\n\nconst server = agreedServer({\n  path: 'agreed/agreed.json',\n  port: 3001,\n  static: './static', // serve files from ./static\n  staticPrefixPath: '/public',\n}).createServer();\n```\n\n# Advanced Usage\n\nUsage as Express pure server\n\n```js\nconst agreedServer = require('agreed-server');\n\nconst { app, createServer } = agreedServer({\n  path: 'agreed/agreed.json',\n  port: 3001,\n  static: './static', // serve files from ./static\n  staticPrefixPath: '/public',\n  middlewares: [\n    logger,\n    perfTool,\n    secureHeaders,\n  ],\n  defaultRequestHeaders: {\n    'x-forwarded-for': 'nginx'\n  },\n  defaultResponseHeaders: {\n    'access-control-allow-origin': '*'\n  },\n});\n\napp.use(someGoodMiddleware);\napp.use((err, req, res, next) => {\n  res.statusCode = 500;\n  res.send(`Error is occurred : ${err}, you should see log`);\n});\nconst server = createServer(app);\n```\n\n## notifier\n\nUsage as notification event\n\n### agreed file\n\n```js\nmodule.exports = [\n  {\n    request: {\n      path: '/messages',\n      method: 'POST',\n      body: {\n        message: '{:message}'\n      },\n      values: {\n        message: 'test',\n      },\n    },\n    response: {\n      body: {\n        result : '{:message}'\n      },\n      values: {\n        message: 'test',\n      },\n      // add notify property for notification\n      notify: {\n        body: {\n          message: 'message! {:message}'\n        }\n      }\n    },\n  },\n]\n```\n\n\n```js\nconst agreedServer = require('agreed-server');\n\nconst { app, createServer, notifier } = agreedServer({\n  path: 'agreed/agreed.json',\n  port: 3001,\n  static: './static', // serve files from ./static\n  staticPrefixPath: '/public',\n  middlewares: [\n    logger,\n    perfTool,\n    secureHeaders,\n  ],\n  defaultRequestHeaders: {\n    'x-forwarded-for': 'nginx'\n  },\n  defaultResponseHeaders: {\n    'access-control-allow-origin': '*'\n  },\n});\n\nnotifier.on('message', (data) => {\n  console.log(data) // { message: 'message! hoge' }\n});\n\napp.use(someGoodMiddleware);\napp.use((err, req, res, next) => {\n  res.statusCode = 500;\n  res.send(`Error is occurred : ${err}, you should see log`);\n});\nconst server = createServer(app);\n```\n"
  },
  {
    "path": "packages/server/bin/agreed-server.js",
    "content": "#!/usr/bin/env node\n\nconst minimist = require('minimist');\nconst argv = minimist(process.argv.slice(2), {\n  string: [\n    'path',\n    'port',\n    'static',\n    'static-prefix-path',\n    'default-response-headers',\n    'default-request-headers',\n    'proxy',\n    'proxy-prefix-path',\n    'typed-cache-path'\n  ],\n  boolean: ['help', 'version', 'logging', 'strict', 'hot', 'cors', 'enable-prefer-query', 'skip-check-header-value-nullable'],\n  alias: {\n    l: 'logging'\n  },\n  default: {\n    hot: true\n  }\n});\nconst path = require('path');\nconst colo = require('colo');\nconst JSON5 = require('json5');\nconst url = require('url');\nconst agreedServer = require('../');\n\nconst usage = `\nUsage: agreed-server --path <path> [options]\n\nOptions:\n  --help                             Shows the usage and exits.\n  --version                          Shows version number and exits.\n  --path <path>                      Agreed file path. Required.\n  --port <port>                      Server port. Default 3000.\n  --static <path>                    Static file path.\n  --static-prefix-path <prefix>      Static serve path prefix.\n  --default-response-headers <json>  Default response headers object.\n  --default-request-headers <json>   Default request headers object.\n  --proxy <hostname>                 Proxy host.\n  --proxy-prefix-path <prefix>       Proxy server path prefix.\n  -l, --logging                      Logs requests in console.\n  --cors                             Enable CORS.\n  --strict                           Run strict mode.\n  --hot                              Hot Replacement agree files. Default true\n  --typed-cache-path                 Create Cached JSON to improve agreed typed performance.\n  --enable-prefer-query              Check for matching query character values\n  --skip-check-header-value-nullable Skip header null check \n\nExamples:\n  agreed-server --path ./agreed.js --port 4000\n  agreed-server --path ./agreed.js --port 4000 \\\\\n                --static ./static --stati-prefix-path /public \\\\\n                --default-response-headers \"{ 'access-control-allow-origin': '*' }\" \\\\\n                --default-request-headers \"{ 'x-jwt-token': 'foobarbaz' }\"\n  agreed-server --path ./agreed.js --port 4000 \\\\\n                --proxy example.com \\\\\n                --proxy-prefix-path /proxy\n  agreed-server --path ./agreed.js --port 4000 \\\\\n                --typed-cache-path ./.agreed.json\n  agreed-server --path ./agreed.js --port 4000 --enable-prefer-query\n`.trim();\n\nfunction showHelp(exitcode) {\n  console.log(usage);\n  process.exit(exitcode);\n}\n\nif (argv.help) {\n  showHelp(0);\n}\n\nif (argv.version) {\n  const pack = require('../package.json');\n  console.log(pack.version);\n  process.exit(0);\n}\n\nif (!argv.path) {\n  console.error(colo.red('[agreed-server]: --path option is required'));\n  showHelp(1);\n}\n\nif (argv['default-response-headers']) {\n  argv.defaultResponseHeaders = JSON5.parse(argv['default-response-headers']);\n}\n\nif (argv['default-request-headers']) {\n  argv.defaultRequestHeaders = JSON5.parse(argv['default-request-headers']);\n}\n\nagreedServer(argv).createServer();\n"
  },
  {
    "path": "packages/server/index.js",
    "content": "'use strict';\nconst express = require('express');\nconst path = require('path');\nconst bodyParser = require('body-parser');\nconst Agreed = require('@agreed/core');\nconst httpProxy = require('express-http-proxy');\nconst morgan = require('morgan');\nconst cors = require('cors');\n\nmodule.exports = (opts) => {\n  if (!opts) {\n    throw new Error('[agreed-server] option is required.');\n  }\n\n  if (!opts.path) {\n    throw new Error('[agreed-server] option.path is required.');\n  }\n\n  const app = express();\n  const port = opts.port || 3000;\n  const stat = opts.static;\n  const staticPrefixPath = opts['static-prefix-path'] || opts.staticPrefixPath;\n  const proxy = opts.proxy;\n  const proxyPrefixPath = opts['proxy-prefix-path'] || opts.proxyPrefixPath;\n  const proxyOpts = opts.proxyOpts || {};\n  const typedCachePath = opts['typed-cache-path'] || opts.typedCachePath;\n  opts.typedCachePath = typedCachePath;\n  const enablePreferQuery = opts[\"enable-prefer-query\"] || opts.enablePreferQuery;\n  opts.enablePreferQuery = enablePreferQuery;\n  const skipCheckHeaderValueNullable = opts[\"skip-check-header-value-nullable\"] || opts.skipCheckHeaderValueNullable;\n  opts.skipCheckHeaderValueNullable = skipCheckHeaderValueNullable;\n\n  app.use(bodyParser.json());\n  app.use(bodyParser.urlencoded({ extended: true }));\n\n  if (stat) {\n    if (staticPrefixPath) {\n      app.use(staticPrefixPath, express.static(path.join(process.cwd(), stat)));\n    } else {\n      app.use(express.static(path.join(process.cwd(), stat)));\n    }\n  }\n\n  if (proxy) {\n    if (proxyPrefixPath) {\n      app.use(proxyPrefixPath, httpProxy(proxy, proxyOpts));\n    } else {\n      app.use(httpProxy(proxy, proxyOpts));\n    }\n  }\n\n  if (opts.middlewares) {\n    if (!Array.isArray(opts.middlewares)) {\n      throw new Error('[agreed-server] option.middlewares must be an array.');\n    }\n    opts.middlewares.forEach((fn) => {\n      app.use(fn);\n    });\n  }\n\n  if (opts.logging) {\n    app.use(morgan('tiny'));\n  }\n\n  if (opts.cors) {\n    app.use(cors());\n  }\n\n  const agreed = new Agreed();\n  app.use(agreed.middleware(opts));\n\n  const createServer = (appServer = app) => {\n    appServer.use((err, req, res, next) => {\n      res.statusCode = 500;\n      res.send(`Error is occurred : ${err}`);\n    });\n    const server = appServer.listen(opts.port);\n    if (opts.closeTime) {\n      setTimeout(server.close, opts.closeTime);\n    }\n    return server;\n  };\n\n  const notifier = agreed.server.notifier;\n\n  return {\n    // low level\n    app,\n    // high level\n    createServer,\n    notifier\n  };\n};\n"
  },
  {
    "path": "packages/server/package.json",
    "content": "{\n  \"name\": \"@agreed/server\",\n  \"version\": \"6.0.0\",\n  \"description\": \"agreed server\",\n  \"main\": \"index.js\",\n  \"bin\": {\n    \"server\": \"bin/agreed-server.js\"\n  },\n  \"scripts\": {\n    \"test\": \"eater\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/recruit-tech/agreed.git\"\n  },\n  \"keywords\": [\n    \"agreed\",\n    \"server\",\n    \"mock\",\n    \"port\"\n  ],\n  \"author\": \"yosuke-furukawa\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/recruit-tech/agreed-server/issues\"\n  },\n  \"homepage\": \"https://github.com/recruit-tech/agreed-server#readme\",\n  \"dependencies\": {\n    \"@agreed/core\": \"^6.0.0\",\n    \"body-parser\": \"^1.18.3\",\n    \"cors\": \"^2.8.5\",\n    \"express\": \"^4.16.4\",\n    \"express-http-proxy\": \"^1.6.0\",\n    \"morgan\": \"^1.9.1\"\n  },\n  \"devDependencies\": {\n    \"assert-stream\": \"1.1.1\",\n    \"eater\": \"4.0.4\",\n    \"must-call\": \"1.0.0\",\n    \"plz-port\": \"1.0.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"directories\": {\n    \"test\": \"test\"\n  }\n}\n"
  },
  {
    "path": "packages/server/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\"\n  ]\n}\n"
  },
  {
    "path": "packages/server/test/agreed.json",
    "content": "[\n  {\n    request: {\n      path: \"/users/:id\"\n    },\n    response: {\n      body: {\n        message: 'hello {:id}',\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/users/header/:id\",\n      values: {\n        jwt: 'testtesttesttest'\n      },\n    },\n    response: {\n      body: {\n        message: 'hello {:id}',\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/shops/:id\",\n    },\n    response: {\n      body: {\n        message: 'shop {:id}',\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/urlencoded/test\",\n      method: \"POST\",\n      body: {\n        foo: \"bar\",\n        bar: \"baz\",\n        hoge: \"fuga\"\n      },\n      headers: {\n        'content-type': 'application/x-www-form-urlencoded'\n      }\n    },\n    response: {\n      body: {\n        message: 'hello wwwurlencoded',\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/cors/test\",\n      method: \"POST\"\n    },\n    response: {\n      body: {\n        message: 'hello cors',\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/bar\"\n    },\n    response: {\n      body: {\n        message: 'hello foo',\n      }\n    }\n  }\n]\n"
  },
  {
    "path": "packages/server/test/agreedNotify.json5",
    "content": "[\n  {\n    request: {\n      path: \"/users/:id\"\n    },\n    response: {\n      body: {\n        message: 'hello {:id}',\n      },\n      notify: {\n        body: {\n          message: 'hello {:id}',\n        }\n      }\n    }\n  },\n]\n\n"
  },
  {
    "path": "packages/server/test/agreedProxy.json",
    "content": "[\n  {\n    request: {\n      path: \"/test/proxy\"\n    },\n    response: {\n      body: {\n        message: 'hello proxy',\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/foo\"\n    },\n    response: {\n      body: {\n        message: 'hello foo',\n      }\n    }\n  },\n]\n\n"
  },
  {
    "path": "packages/server/test/app.js",
    "content": "'use strict';\nconst test = require('eater/runner').test;\nconst assert = require('assert');\nconst agreedServer = require('../');\nconst AssertStream = require('assert-stream');\nconst http = require('http');\n\ntest('agreed-server: instance app', () => {\n  const { app, createServer } = agreedServer({\n    path: './test/agreed',\n    port: '0',\n    hot: false\n  });\n\n  const server = createServer(app);\n  server.on('listening', () => {\n    const port = server.address().port;\n    const options = {\n      host: 'localhost',\n      method: 'GET',\n      path: '/shops/test',\n      port: port,\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    };\n    http.get(options, (res) => {\n      server.close();\n      const assertStream = new AssertStream();\n      assertStream.expect({\n        message: 'shop test'\n      });\n      res.pipe(assertStream);\n    });\n  });\n});\n\ntest('agreed-server: call foobarbaz', () => {\n  const { app, createServer } = agreedServer({\n    path: './test/agreed',\n    port: '0',\n    callNextWhenNotFound: true,\n    hot: true\n  });\n\n  app.use('/foobarbaz', (req, res, next) => {\n    res.send('hello middleware');\n  });\n\n  const server = createServer(app);\n  server.on('listening', () => {\n    const port = server.address().port;\n    const options = {\n      host: 'localhost',\n      method: 'GET',\n      path: '/foobarbaz',\n      port: port\n    };\n    http.get(options, (res) => {\n      server.close();\n      const assertStream = new AssertStream();\n      assertStream.expect('hello middleware');\n      res.pipe(assertStream);\n    });\n  });\n});\n"
  },
  {
    "path": "packages/server/test/cors.js",
    "content": "'use strict';\nconst test = require('eater/runner').test;\nconst assert = require('assert');\nconst agreedServer = require('../');\nconst http = require('http');\n\ntest('cors option', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    port: '0',\n    cors: true,\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    const url = `http://localhost:${port}/cors/test`\n\n    const preflight = http.request(url, { method: 'OPTIONS' }, (res) => {\n      assert.strictEqual(res.headers['access-control-allow-origin'], '*');\n      assert.strictEqual(res.headers['access-control-allow-methods'], 'GET,HEAD,PUT,PATCH,POST,DELETE');\n      assert.strictEqual(res.statusCode, 204);\n\n      const post = http.request(url, { method: 'POST' }, (res) => {\n        server.close();\n        assert.strictEqual(res.headers['access-control-allow-origin'], '*');\n      });\n      post.write('');\n      post.end();\n    });\n    preflight.write('');\n    preflight.end();\n  });\n});"
  },
  {
    "path": "packages/server/test/index.js",
    "content": "'use strict';\nconst test = require('eater/runner').test;\nconst assert = require('assert');\nconst agreedServer = require('../');\nconst AssertStream = require('assert-stream');\nconst http = require('http');\n\ntest('agreed-server: call server', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    port: '0',\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    http.get(`http://localhost:${port}/users/yosuke`, (res) => {\n      server.close();\n      const assertStream = new AssertStream();\n      assertStream.expect({\n        message: 'hello yosuke'\n      });\n      res.pipe(assertStream);\n    });\n  });\n});\n\ntest('agreed-server: static server', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    static: './test/static',\n    staticPrefixPath: '/public',\n    port: '0',\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    http.get(`http://localhost:${port}/public/test.jpg`, (res) => {\n      server.close();\n      assert.strictEqual(res.headers['content-type'], 'image/jpeg');\n      assert.strictEqual(res.statusCode, 200);\n    });\n  });\n});\n\ntest('agreed-server: static server without prefix', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    static: './test/static',\n    port: '0',\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    http.get(`http://localhost:${port}/test.jpg`, (res) => {\n      server.close();\n      assert.strictEqual(res.headers['content-type'], 'image/jpeg');\n      assert.strictEqual(res.statusCode, 200);\n    });\n  });\n});\n\ntest('pass middlewares option', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    port: 0,\n    middlewares: [\n      (req, res, next) => {\n        res.set({\"access-control-allow-origin\": \"*\"});\n        next();\n      }\n    ]\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    http.get(`http://localhost:${port}/users/yosuke`, (res) => {\n      server.close();\n      assert.deepEqual(res.headers[\"access-control-allow-origin\"], \"*\");\n    });\n  });\n});\n\ntest('pass defaultResponseHeaders option', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    port: 0,\n    defaultResponseHeaders: {\n      'access-control-allow-origin': '*'\n    }\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    http.get(`http://localhost:${port}/users/yosuke`, (res) => {\n      server.close();\n      assert.deepEqual(res.headers[\"access-control-allow-origin\"], \"*\");\n    });\n  });\n});\n\ntest('pass defaultRequestHeaders option', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    port: 0,\n    defaultRequestHeaders: {\n      'x-jwt-token': 'testtesttest'\n    }\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    const options = {\n      host: 'localhost',\n      method: 'GET',\n      path: '/users/header/yosuke',\n      port: port,\n      headers: {\n        'Content-Type': 'application/json',\n        'x-jwt-token': 'testtesttest'\n      }\n    };\n    http.get(options, (res) => {\n      server.close();\n      const assertStream = new AssertStream();\n      assertStream.expect({\n        message: 'hello yosuke'\n      });\n      res.pipe(assertStream);\n    });\n  });\n});\n\n"
  },
  {
    "path": "packages/server/test/notify.js",
    "content": "'use strict';\nconst test = require('eater/runner').test;\nconst assert = require('assert');\nconst agreedServer = require('../');\nconst AssertStream = require('assert-stream');\nconst http = require('http');\nconst mustCall = require('must-call');\n\ntest('notify option', () => {\n  const { app, createServer, notifier } = agreedServer({\n    port: 0,\n    path: './test/agreedNotify.json5'\n  });\n\n  const server = createServer(app);\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    const options = {\n      host: 'localhost',\n      method: 'GET',\n      path: '/users/123',\n      port: port,\n      headers: {\n        'Content-Type': 'application/json',\n      }\n    };\n    http.get(options, (res) => {\n      server.close();\n      const assertStream = new AssertStream();\n      assertStream.expect({\n        message: 'hello 123'\n      });\n      res.pipe(assertStream);\n    });\n  });\n\n  notifier.on('message', mustCall((data) => {\n    assert.deepStrictEqual({\n      message: 'hello 123'\n    }, data);\n  }));\n\n});\n\n"
  },
  {
    "path": "packages/server/test/proxy.js",
    "content": "'use strict';\nconst test = require('eater/runner').test;\nconst assert = require('assert');\nconst agreedServer = require('../');\nconst AssertStream = require('assert-stream');\nconst http = require('http');\n\ntest('proxy option', () => {\n  const proxyServer = agreedServer({\n    path: './test/agreedProxy',\n    port: 0,\n  }).createServer();\n\n  proxyServer.on('listening', () => {\n    const proxyPort = proxyServer.address().port;\n    const server = agreedServer({\n      path: './test/agreed',\n      port: 0,\n      proxy: `127.0.0.1:${proxyPort}`,\n    }).createServer();\n\n    server.on('listening', () => {\n      const port = server.address().port;\n      const options = {\n        host: 'localhost',\n        method: 'GET',\n        path: '/test/proxy',\n        port: port,\n      };\n      http.get(options, (res) => {\n        proxyServer.close();\n        server.close();\n        const assertStream = new AssertStream();\n        assertStream.expect({\n          message: 'hello proxy'\n        });\n        res.pipe(assertStream);\n      });\n    });\n  });\n});\n\ntest('proxy prefix proxy path option', () => {\n  const proxyServer = agreedServer({\n    path: './test/agreedProxy',\n    port: 0,\n  }).createServer();\n\n  proxyServer.on('listening', () => {\n    const proxyPort = proxyServer.address().port;\n    const server = agreedServer({\n      path: './test/agreed',\n      port: 0,\n      proxy: `127.0.0.1:${proxyPort}`,\n      proxyPrefixPath: '/proxy'\n    }).createServer();\n\n    server.on('listening', () => {\n      const port = server.address().port;\n      const options = {\n        host: 'localhost',\n        method: 'GET',\n        path: '/proxy/test/proxy',\n        port: port,\n      };\n      http.get(options, (res) => {\n        proxyServer.close();\n        server.close();\n        const assertStream = new AssertStream();\n        assertStream.expect({\n          message: 'hello proxy'\n        });\n        res.pipe(assertStream);\n      });\n    });\n  });\n});\n\ntest('proxy prefix proxy path option with proxyMaybeSkipToNextHandler', () => {\n  const proxyServer = agreedServer({\n    path: './test/agreedProxy',\n    port: 0,\n  }).createServer();\n\n  proxyServer.on('listening', () => {\n    const proxyPort = proxyServer.address().port;\n    const server = agreedServer({\n      path: './test/agreed',\n      port: 0,\n      proxy: `127.0.0.1:${proxyPort}`,\n      proxyOpts: {\n        filter: (req, res) => {\n          return req.originalUrl === '/foo'\n        },\n        maybeSkipToNextHandler: (proxyRes) => {\n          return proxyRes.statusCode >= 400;\n        },\n      }\n    }).createServer();\n\n    server.on('listening', () => {\n      const port = server.address().port;\n      ['/foo', '/bar'].forEach((path) => {\n        const options = {\n          host: 'localhost',\n          method: 'GET',\n          path: path,\n          port: port,\n        };\n        http.get(options, (res) => {\n          const assertStream = new AssertStream();\n          assertStream.expect({\n            message: 'hello foo'\n          });\n          res.pipe(assertStream);\n        });\n      });\n      setTimeout(() => {\n        proxyServer.close();\n        server.close();\n      }, 2000);\n    });\n  });\n});\n\n"
  },
  {
    "path": "packages/server/test/www_urlencoded.js",
    "content": "'use strict';\nconst test = require('eater/runner').test;\nconst assert = require('assert');\nconst agreedServer = require('../');\nconst AssertStream = require('assert-stream');\nconst http = require('http');\n\ntest('www_urlencoded option', () => {\n  const server = agreedServer({\n    path: './test/agreed',\n    port: 0,\n  }).createServer();\n\n  server.on('listening', () => {\n    const port = server.address().port;\n    const options = {\n      host: 'localhost',\n      method: 'POST',\n      path: '/urlencoded/test',\n      port: port,\n      headers: {\n        'content-type': 'application/x-www-form-urlencoded'\n      },\n    };\n    const request = http.request(options, (res) => {\n      server.close();\n      const assertStream = new AssertStream();\n      assertStream.expect({\n        message: 'hello wwwurlencoded'\n      });\n      res.pipe(assertStream);\n    });\n    request.write('foo=bar&bar=baz&hoge=fuga');\n    request.end();\n  });\n});\n\n"
  },
  {
    "path": "packages/typed/.circleci/config.yml",
    "content": "version: 2\njobs:\n  build:\n    docker:\n      - image: circleci/node:17-browsers\n    working_directory: ~/node\n    steps:\n      - checkout\n      - restore_cache:\n          key: v1-dependencies-{{ checksum \"package.json\"}}\n      - run:\n          name: Run yarn install\n          command: yarn install\n      - run:\n          name: prepare greenkeeper-lockfile\n          command: |\n            echo 'export PATH=$(yarn global bin):$PATH' >> $BASH_ENV\n            source $BASH_ENV\n            yarn global add greenkeeper-lockfile@1\n      - save_cache:\n          paths:\n            - node_modules\n          key: v1-dependencies-{{ checksum \"package.json\" }}\n      - run:\n          name: Run lint\n          command: yarn lint\n      - run:\n          name: tsc\n          command: yarn tsc\n      - run: greenkeeper-lockfile-upload\n"
  },
  {
    "path": "packages/typed/.gitignore",
    "content": "\n# Created by https://www.gitignore.io/api/node\n\n### Node ###\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# next.js build output\n.next\n\n# nuxt.js build output\n.nuxt\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless\n\n\n# End of https://www.gitignore.io/api/node\nlib\n\nschema.json\nschema.yaml\n"
  },
  {
    "path": "packages/typed/.npmignore",
    "content": "\n# Created by https://www.gitignore.io/api/node\n\n### Node ###\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n.idea\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# next.js build output\n.next\n\n# nuxt.js build output\n.nuxt\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless\n\n\n# End of https://www.gitignore.io/api/node\n"
  },
  {
    "path": "packages/typed/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\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"
  },
  {
    "path": "packages/typed/README.md",
    "content": "# agreed-typed\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/akito0107/agreed-typed.svg)](https://greenkeeper.io/)\n\n- agreed api type definitions (types.ts)\n- agreed.ts to swagger generator\n\n## install\n```shell\n$ npm install -g agreed-typed\n```\n\n## usage\n```shell\n$ agreed-typed --help\nUsage: agreed-typed [subcommand] [options]\nSubcommands:\n  gen-swagger                        Generate swagger file.\nOptions:\n  --help                             Shows the usage and exits.\n  --version                          Shows version number and exits.\nExamples:\n  agreed-typed gen-swagger --path ./agreed.ts\n```\n\n### gen-swagger\n```shell\n$ agreed-typed gen-swagger --help\nUsage: agreed-typed gen-swagger [options]\n  Options:\n    --path                             Agreed file path (required)\n    --title                            swagger title\n    --description                      swagger description\n    --version                          document version\n    --depth                            aggregate depth (default = 2)\n    --dry-run                          dry-run mode (outputs on stdout)\n    --output                           output filename (default schema.json)\n    --host                             swagger host (default localhost:3030)\n    --format                           file format [json|yaml] (default json)\n    --help                             show help\n  Examples:\n    agreed-typed gen-swagger --path ./agreed.ts --output schema # output file = schema.json\n    agreed-typed gen-swagger --path ./agreed.ts --output schema --format yaml #  output file = schema.yaml\n```\n\n## Annotations\n### Validations\nhttp://json-schema.org/latest/json-schema-validation.html\n\n- multipleOf\n- maximum\n- exclusiveMaximum\n- minimum\n- exclusiveMinimum\n- maxLength\n- minLength\n- pattern\n- maxItems\n- minItems\n- uniqueItems\n- maxProperties\n- minProperties\n- additionalProperties\n- enum\n- type\n- examples\n- ignore\n- description\n- format\n- default\n- $ref\n- id\n\n## License\nThis project is licensed under the Apache License 2.0 License - see the [LICENSE](LICENSE) file for details\n"
  },
  {
    "path": "packages/typed/package.json",
    "content": "{\n  \"name\": \"@agreed/typed\",\n  \"version\": \"6.0.2\",\n  \"main\": \"./lib/types.js\",\n  \"types\": \"./lib/types.d.ts\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/recruit-tech/agreed.git\"\n  },\n  \"author\": \"Akito Ito <akito_ito@r.recruit.co.jp>\",\n  \"scripts\": {\n    \"test\": \"node --import tsx --test src/__tests__/**.ts src/**/__tests__/**.ts\",\n    \"lint\": \"tslint ./src/**/*.ts\",\n    \"lintfix\": \"tslint ./src/**/*.ts --fix\",\n    \"tsc\": \"tsc\",\n    \"prepublish\": \"npm run tsc\"\n  },\n  \"bin\": {\n    \"agreed-typed\": \"lib/bin/agreed-typed.js\"\n  },\n  \"devDependencies\": {\n    \"body-parser\": \"1.20.0\",\n    \"cors\": \"2.8.5\",\n    \"express\": \"4.18.2\",\n    \"prettier\": \"2.8.4\",\n    \"ts-node\": \"^10.9.2\",\n    \"tslint\": \"6.1.3\",\n    \"tslint-config-prettier\": \"1.18.0\",\n    \"tslint-plugin-prettier\": \"2.3.0\",\n    \"tsx\": \"^4.7.1\",\n    \"typescript\": \"4.7.4\"\n  },\n  \"dependencies\": {\n    \"@agreed/core\": \"^6.0.0\",\n    \"@types/estree\": \"1.0.0\",\n    \"@types/minimist\": \"^1.2.0\",\n    \"@types/node\": \"^18.0.0\",\n    \"@typescript-eslint/types\": \"^7.2.0\",\n    \"@typescript-eslint/typescript-estree\": \"^7.2.0\",\n    \"doctrine\": \"^3.0.0\",\n    \"json2yaml\": \"^1.1.0\",\n    \"minimist\": \"^1.2.0\",\n    \"typescript-json-schema\": \"^0.55.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"description\": \"[![Greenkeeper badge](https://badges.greenkeeper.io/akito0107/agreed-typed.svg)](https://greenkeeper.io/)\",\n  \"bugs\": {\n    \"url\": \"https://github.com/recruit-tech/agreed/issues\"\n  },\n  \"homepage\": \"https://github.com/recruit-tech/agreed#readme\",\n  \"keywords\": [\n    \"typescript\",\n    \"agreed\"\n  ]\n}\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/agreed.ts",
    "content": "import {\n  APIDef,\n  Capture,\n  convert,\n  Error404,\n  GET,\n  ResponseDef,\n  Success200\n} from \"../../types\";\n\nimport * as getApis from \"./agrees-get\";\nimport * as getApi2 from \"./agrees-get2\";\nimport * as patchApis from \"./agrees-patch\";\nimport * as postApis from \"./agrees-post\";\nimport * as postApis2 from \"./agrees-post2\";\nimport * as putApis from \"./agrees-put\";\n\ntype HelloAPI = APIDef<\n  GET, // HTTP Method\n  [\"user\", Capture<\":id\">], //  /user/:id\n  any, // request header\n  { q: string }, // request query\n  undefined, // request body\n  {}, // response header\n  | ResponseDef<Success200, HelloResponseBody>\n  | ResponseDef<Error404, { error: \"test\" }> // response body and status\n>;\n\ntype HelloResponseBody = { message: string };\n\nconst hellos: HelloAPI[] = [\n  {\n    request: {\n      path: [\"user\", \":id\"],\n      method: \"GET\",\n      query: {\n        q: \"{:someQueryStrings}\"\n      },\n      body: undefined\n    },\n    response: {\n      status: 200,\n      body: {\n        message: \"{:id} {:someQueryString}\"\n      }\n    }\n  },\n  {\n    request: {\n      path: [\"user\", \"9999\"],\n      method: \"GET\",\n      query: {\n        q: \"{:someQueryStrings}\"\n      },\n      body: undefined\n    },\n    response: {\n      status: 404,\n      body: {\n        error: \"test\"\n      }\n    }\n  }\n];\n\nconst agrees = [\n  hellos,\n  getApis,\n  getApi2,\n  postApis,\n  putApis,\n  postApis2,\n  patchApis\n].map((a: any) => convert(...a));\n\nmodule.exports = agrees.reduce((acc, val) => acc.concat(val), []);\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/agrees-get.ts",
    "content": "import {\n  APIDef,\n  Capture,\n  Error404,\n  GET,\n  Integer,\n  ResponseDef,\n  Success200\n} from \"../../types\";\n\nenum QueryEnum {\n  A = 1,\n  B\n}\n\ntype Moo = \"moo\" | \"mooo\";\n\n/**\n * Ping GET API\n * description area\n * may be acceptable `.md` syntax\n * @summary PING Get API\n */\nexport type PingAPI = APIDef<\n  GET, // HTTP Method\n  [\"ping\", Capture<\":message\">], // /ping/:message\n  { apiKey: \"x-api-key\"; foo?: string }, // request header\n  {\n    q: string;\n    qoo?: string;\n    moo: Moo;\n    query2: QueryEnum;\n    arrayQuery?: Integer[];\n  }, // request query\n  undefined, // request body\n  { \"x-token\": \"xxx\" }, // response header\n  ResponseDef<Success200, PongBody> | ResponseDef<Error404, ErrorPongBody> // response\n>;\n\ntype PongBody = {\n  message: string;\n};\n\ntype ErrorPongBody = {\n  errorCode: string;\n  message: string;\n};\n\nconst pingAPIs: PingAPI[] = [\n  {\n    request: {\n      path: [\"ping\", \"test\"], // /ping/test/hoge\n      query: {\n        q: \"{:query}\",\n        moo: \"moo\",\n        query2: 1\n      },\n      method: \"GET\",\n      body: undefined\n    },\n    response: {\n      headers: { \"x-token\": \"xxx\" },\n      status: 200,\n      body: { message: \"test\" }\n    }\n  },\n  {\n    request: {\n      path: [\"ping\", \":message\"], // /ping/:message\n      method: \"GET\",\n      body: undefined\n    },\n    response: {\n      headers: { \"x-token\": \"xxx\" },\n      status: 200,\n      body: { message: \"ok {:message}\" }\n    }\n  },\n  {\n    request: {\n      path: [\"ping\", \"notfound\"], // /ping/:message\n      method: \"GET\",\n      body: undefined\n    },\n    response: {\n      status: 404,\n      body: { errorCode: \"404\", message: \"invalid id\" }\n    }\n  }\n];\n\nmodule.exports = pingAPIs;\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/agrees-get2.ts",
    "content": "import {\n  APIDef,\n  Capture,\n  GET,\n  Integer,\n  Placeholder,\n  ResponseDef,\n  Success200,\n  Success201\n} from \"../../types\";\n\nexport type UserAPI = APIDef<\n  GET,\n  [\"user\", Capture<\":id\", Integer>],\n  {},\n  { q: string; q2?: Integer },\n  undefined,\n  { \"x-csrf-token\": \"csrf-token\" },\n  | ResponseDef<\n      Success200,\n      {\n        message: string;\n        images: Placeholder<string[]>;\n        themes: Placeholder<theme>;\n      }\n    >\n  | ResponseDef<Success201, resp>\n>;\n\ntype theme = {\n  name: string;\n};\n\ntype resp = {\n  param?: Placeholder<{\n    name: string;\n  }>;\n  param2: Placeholder<{\n    nested: Placeholder<number>;\n  }>;\n};\n\nconst api: UserAPI[] = [\n  {\n    request: {\n      path: [\"user\", 123],\n      method: \"GET\",\n      query: {\n        q: \"{:someQueryStrings}\"\n      },\n      body: undefined,\n      values: {\n        id: \"yosuke\",\n        someQueryStrings: \"foo\"\n      }\n    },\n    response: {\n      status: 200,\n      headers: {\n        \"x-csrf-token\": \"csrf-token\"\n      },\n      body: {\n        message: \"{:greeting} {:id} {:someQueryStrings}\",\n        images: \"{:images}\",\n        themes: \"{:themes}\"\n      },\n      values: {\n        greeting: \"hello\",\n        images: [\"http://example.com/foo.jpg\", \"http://example.com/bar.jpg\"],\n        themes: {\n          name: \"green\"\n        }\n      }\n    }\n  },\n  {\n    request: {\n      path: [\"user\", \":id\"],\n      method: \"GET\",\n      query: {\n        q: \"{:someQueryStrings}\"\n      },\n      body: undefined,\n      values: {\n        id: \"yosuke\",\n        someQueryStrings: \"foo\"\n      }\n    },\n    response: {\n      status: 201,\n      headers: {\n        \"x-csrf-token\": \"csrf-token\"\n      },\n      body: {\n        param: \"{:aaa}\",\n        param2: {\n          nested: 123\n        }\n      },\n      values: {\n        aaa: \"test\"\n      }\n    }\n  }\n];\n\nmodule.exports = api;\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/agrees-patch.ts",
    "content": "import {\n  APIDef,\n  Capture,\n  Error400,\n  PATCH,\n  Placeholder,\n  ResponseDef,\n  Success204\n} from \"../../types\";\nimport { CreateRequestBody } from \"./agrees-post\";\n\n/**\n * @summary patch example\n */\nexport type PatchAPI = APIDef<\n  PATCH, // HTTP Method\n  [\"ping\", Capture<\":id\">], // /ping/:message\n  { apiKey: string }, // header\n  { q: string }, // query\n  Partial<CreateRequestBody>, // Http Request Body\n  {},\n  | ResponseDef<Success204, undefined>\n  | ResponseDef<\n      Error400,\n      {\n        code: Placeholder<number>;\n        message: string;\n      }\n    >\n>;\n\nconst patchAPIs: PatchAPI[] = [\n  {\n    request: {\n      path: [\"ping\", \"121\"], // /ping/test\n      headers: {\n        apiKey: \"{:apiKey}\"\n      },\n      method: \"PATCH\",\n      body: {\n        id: \"{:id}\",\n        genderId: 2\n      },\n      values: {\n        id: 123\n      }\n    },\n    response: {\n      status: 204\n    }\n  },\n  {\n    request: {\n      path: [\"ping\", \"999\"], // /ping/test\n      headers: {\n        apiKey: \"{:apiKey}\"\n      },\n      method: \"PATCH\",\n      body: {\n        email: \"hoge@hoge.com{:apiKey}\",\n        genderId: 2\n      },\n      values: {\n        error: \"not a number\"\n      }\n    },\n    response: {\n      status: 400,\n      body: {\n        code: 123,\n        message: \"invalid parameter\"\n      }\n    }\n  }\n];\n\nmodule.exports = patchAPIs;\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/agrees-post.ts",
    "content": "import {\n  APIDef,\n  Capture,\n  Placeholder,\n  POST,\n  ResponseDef,\n  Success201\n} from \"../../types\";\n\nexport type CreateAPI = APIDef<\n  POST, // HTTP Method\n  [\"ping\", Capture<\":message\">], // /ping/:message\n  { apiKey: string }, // header\n  { q: string }, // query\n  CreateRequestBody, // Http Request Body\n  {},\n  ResponseDef<Success201, CreateResponseBody>\n>;\n\nenum GenderType {\n  Male = 1,\n  Famale,\n  Other\n}\n\nexport type CreateRequestBody = {\n  /**\n   * @pattern [A-Z]+\n   */\n  email: string;\n  /**\n   * @maximum 1000\n   * @minimum 0\n   */\n  id: Placeholder<number>;\n  genderId: GenderType;\n};\n\ntype CreateResponseBody = {\n  message: string;\n};\n\nconst createAPIs: CreateAPI[] = [\n  {\n    request: {\n      path: [\"ping\", \"test\"], // /ping/test\n      headers: {\n        apiKey: \"{:apiKey}\"\n      },\n      method: \"POST\",\n      body: {\n        email: \"hoge@hoge.com{:apiKey}\",\n        id: \"{:id}\",\n        genderId: 2\n      },\n      values: {\n        id: 123\n      }\n    },\n    response: {\n      status: 201,\n      body: { message: \"test\" }\n    }\n  }\n];\n\nmodule.exports = createAPIs;\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/agrees-post2.ts",
    "content": "import {\n  APIDef,\n  Capture,\n  Placeholder,\n  POST,\n  ResponseDef,\n  Success201\n} from \"../../types\";\nimport { SubBody } from \"./types\";\n\nexport type CreateAPI2 = APIDef<\n  POST, // HTTP Method\n  [\"ping\", Capture<\":message\">, \"2\"], // /ping/:message\n  { apiKey: string }, // header\n  { q: string }, // query\n  CreateRequestBody, // Http Request Body\n  {},\n  ResponseDef<Success201, CreateResponseBody2>\n>;\n\nenum GenderType {\n  Male = 1,\n  Famale,\n  Other\n}\n\ntype CreateRequestBody = {\n  /**\n   * @pattern [A-Z]+\n   */\n  email: string;\n  /**\n   * @maximum 1000\n   * @minimum 0\n   */\n  id: number;\n  genderId: GenderType;\n};\n\ntype CreateResponseBody2 = {\n  // prettier-ignore\n  messages: Array<Placeholder<SubBody>>;\n};\n\nconst createAPIs: CreateAPI2[] = [\n  {\n    request: {\n      path: [\"ping\", \"test\", \"2\"], // /ping/test\n      headers: {\n        apiKey: \"{:apiKey}\"\n      },\n      method: \"POST\",\n      body: {\n        email: \"hoge@hoge.com{:apiKey}\",\n        id: 123,\n        genderId: 2\n      },\n      values: {\n        id: 123\n      }\n    },\n    response: {\n      status: 201,\n      body: {\n        messages: [\"{:value}\"]\n      }\n    }\n  }\n];\n\nmodule.exports = createAPIs;\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/agrees-put.ts",
    "content": "import {\n  APIDef,\n  Capture,\n  Error400,\n  Placeholder,\n  PUT,\n  ResponseDef,\n  Success204\n} from \"../../types\";\n\n/**\n * @summary put example\n */\nexport type UpdateAPI = APIDef<\n  PUT, // HTTP Method\n  [\"ping\", Capture<\":id\">], // /ping/:message\n  { apiKey: string }, // header\n  { q: string }, // query\n  CreateRequestBody, // Http Request Body\n  {},\n  | ResponseDef<Success204, undefined>\n  | ResponseDef<\n      Error400,\n      {\n        code: Placeholder<number>;\n        message: string;\n      }\n    >\n>;\n\nenum GenderType {\n  Male = 1,\n  Famale,\n  Other\n}\n\ntype CreateRequestBody = {\n  /**\n   * @pattern [A-Z]+\n   */\n  email: string;\n  /**\n   * @maximum 1000\n   * @minimum 0\n   */\n  id: Placeholder<number>;\n  genderId: GenderType;\n};\n\nconst createAPIs: UpdateAPI[] = [\n  {\n    request: {\n      path: [\"ping\", \"121\"], // /ping/test\n      headers: {\n        apiKey: \"{:apiKey}\"\n      },\n      method: \"PUT\",\n      body: {\n        email: \"hoge@hoge.com{:apiKey}\",\n        id: \"{:id}\",\n        genderId: 2\n      },\n      values: {\n        id: 123\n      }\n    },\n    response: {\n      status: 204\n    }\n  },\n  {\n    request: {\n      path: [\"ping\", \"999\"], // /ping/test\n      headers: {\n        apiKey: \"{:apiKey}\"\n      },\n      method: \"PUT\",\n      body: {\n        email: \"hoge@hoge.com{:apiKey}\",\n        id: \"{:error}\",\n        genderId: 2\n      },\n      values: {\n        error: \"not a number\"\n      }\n    },\n    response: {\n      status: 400,\n      body: {\n        code: 123,\n        message: \"invalid parameter\"\n      }\n    }\n  }\n];\n\nmodule.exports = createAPIs;\n"
  },
  {
    "path": "packages/typed/src/__tests__/data/types.ts",
    "content": "import { Placeholder } from \"../../types\";\n\nexport type SubBody = {\n  prop1: string;\n  prop2: string;\n  prop3: Placeholder<{\n    hoge: string;\n  }>;\n};\n"
  },
  {
    "path": "packages/typed/src/__tests__/server.ts",
    "content": "import Agreed from \"@agreed/core\";\nimport bodyParser from \"body-parser\";\nimport express from \"express\";\nimport path from \"node:path\";\nimport assert from \"node:assert\";\nimport test from \"node:test\";\n\nconst setupServer = (agreed, opts = {}) => {\n  const app = express();\n  app.use(bodyParser.json());\n  app.use(\n    agreed.middleware({\n      ...opts,\n      path: path.resolve(__dirname, \"./data/agreed.ts\"),\n    })\n  );\n  app.use((err, _, res, _next) => {\n    res.status(500);\n    res.send(`Error is occurred : ${err}`);\n  });\n\n  return app;\n};\n\ntest(\"register ts agrees with get\", (t, done) => {\n  const app = setupServer(new Agreed());\n  const server = app.listen(0, async () => {\n    try {\n      const address = server?.address();\n      if (!address || typeof address === \"string\") {\n        throw new Error(\"address is invalid\");\n      }\n      const port = address.port;\n      const response = await fetch(`http://localhost:${port}/ping/hello`);\n      assert.strictEqual(response.status, 200);\n      const data = await response.json();\n      assert.deepStrictEqual(data, { message: \"ok hello\" });\n      server.close(done);\n    } catch (e) {\n      server.close();\n      done(e);\n    }\n  });\n});\n\ntest(\"register ts agrees with get and query\", (t, done) => {\n  const app = setupServer(new Agreed());\n  const server = app.listen(0, async () => {\n    try {\n      const address = server?.address();\n      if (!address || typeof address === \"string\") {\n        throw new Error(\"address is invalid\");\n      }\n      const port = address.port;\n      const response = await fetch(\n        `http://localhost:${port}/ping/test?moo=moo&q=q&query2=1`\n      );\n      assert.strictEqual(response.status, 200);\n      const data = await response.json();\n      assert.deepStrictEqual(data, { message: \"test\" });\n      server.close(done);\n    } catch (e) {\n      server.close();\n      done(e);\n    }\n  });\n});\n\ntest(\"register ts agrees with post\", (t, done) => {\n  const app = setupServer(new Agreed());\n  const server = app.listen(0, async () => {\n    try {\n      const address = server?.address();\n      if (!address || typeof address === \"string\") {\n        throw new Error(\"address is invalid\");\n      }\n      const port = address.port;\n      const response = await fetch(`http://localhost:${port}/ping/test`, {\n        method: \"POST\",\n        body: JSON.stringify({\n          email: \"hoge@hoge.comaaa\",\n          id: 123,\n          genderId: 2,\n        }),\n        headers: {\n          \"Content-Type\": \"application/json\",\n          apiKey: \"aaa\",\n        },\n      });\n      assert.strictEqual(response.status, 201);\n      const data = await response.json();\n      assert.deepStrictEqual(data, { message: \"test\" });\n      server.close(done);\n    } catch (e) {\n      server.close();\n      done(e);\n    }\n  });\n});\n\ntest(\"register ts agrees with post\", (t, done) => {\n  const app = setupServer(new Agreed());\n  const server = app.listen(0, async () => {\n    try {\n      const address = server?.address();\n      if (!address || typeof address === \"string\") {\n        throw new Error(\"address is invalid\");\n      }\n      const port = address.port;\n      const response = await fetch(`http://localhost:${port}/ping/test`, {\n        method: \"POST\",\n        body: JSON.stringify({\n          email: \"hoge@hoge.comaaa\",\n          id: 123,\n          genderId: 2,\n        }),\n        headers: {\n          \"Content-Type\": \"application/json\",\n          apiKey: \"aaa\",\n        },\n      });\n      assert.strictEqual(response.status, 201);\n      const data = await response.json();\n      assert.deepStrictEqual(data, { message: \"test\" });\n      server.close(done);\n    } catch (e) {\n      server.close();\n      done(e);\n    }\n  });\n});\n\ntest(\"register ts agrees with get and query (when enable-prefer-query option is true)\", (t, done) => {\n  const app = setupServer(new Agreed(), { enablePreferQuery: true });\n  const server = app.listen(0, async () => {\n    try {\n      const address = server?.address();\n      if (!address || typeof address === \"string\") {\n        throw new Error(\"address is invalid\");\n      }\n      const port = address.port;\n      const response = await fetch(\n        `http://localhost:${port}/ping/test?moo=moo&q=q&query2=1`\n      );\n      // Agree Not Found when it comes to exact matching of path values\n      const data = await response.json();\n      assert.deepStrictEqual(data, { message: \"ok test\" });\n      server.close(done);\n    } catch (e) {\n      server.close();\n      done(e);\n    }\n  });\n});\n"
  },
  {
    "path": "packages/typed/src/bin/agreed-typed.ts",
    "content": "#!/usr/bin/env node\n\nimport * as minimist from \"minimist\";\nimport { generate } from \"../commands/gen-swagger\";\nimport \"../hook\";\nimport { showHelp } from \"../util\";\n\nconst help = `\nUsage: agreed-typed [subcommand] [options]\nSubcommands:\n  gen-swagger                        Generate swagger file.\nOptions:\n  --help                             Shows the usage and exits.\n  --version                          Shows version number and exits.\nExamples:\n  agreed-typed gen-swagger --path ./agreed.ts\n`.trim();\n\nfunction main() {\n  const argv = minimist(process.argv.slice(2), {\n    stopEarly: true,\n    string: [\"help\", \"version\"],\n  });\n  const commands = {\n    [\"gen-swagger\"]: generate,\n  };\n\n  if (argv.help) {\n    return showHelp(0, help);\n  }\n\n  if (argv.version) {\n    const pack = require(\"../../package.json\");\n    process.stdout.write(pack.version);\n    return;\n  }\n  const subcommand = argv._.shift();\n\n  const fun = commands[subcommand];\n\n  if (!fun) {\n    return showHelp(1, help);\n  }\n\n  fun(argv._);\n}\n\nmain();\n"
  },
  {
    "path": "packages/typed/src/commands/__tests__/gen-swagger.test.ts",
    "content": "import * as path from \"path\";\nimport \"../../hook\";\nimport { run } from \"../gen-swagger\";\nimport test from \"node:test\";\nimport assert from \"node:assert\";\n\ntest(\"e2e testing\", () => {\n  const agreedPath = path.resolve(__dirname, \"../../__tests__/data/agreed.ts\");\n  const swagger = run({\n    path: agreedPath,\n    depth: 2,\n    title: \"testing\",\n    description: \"test description\",\n    version: \"test\",\n    host: \"\",\n    disablePathNumber: false\n  });\n  assert.strictEqual(swagger.info.title, \"testing\");\n});\n"
  },
  {
    "path": "packages/typed/src/commands/gen-swagger.ts",
    "content": "import * as doctrine from \"doctrine\";\nimport * as minimist from \"minimist\";\nimport * as path from \"path\";\nimport { generateSchema } from \"../generate-schema\";\nimport { generateSwagger } from \"../generate-swagger\";\nimport { showHelp } from \"../util\";\n\nimport { AST_NODE_TYPES, parse } from \"@typescript-eslint/typescript-estree\";\n\nimport { ExportNamedDeclaration, Identifier } from \"estree\";\nimport * as fs from \"fs\";\nimport * as YAML from \"json2yaml\";\nimport { Definition } from \"typescript-json-schema\";\n\nconst usage = `\nUsage: agreed-typed gen-swagger [options]\nOptions:\n  --path                             Agreed file path (required)\n  --title                            swagger title\n  --minify                           minify json (only affects json default: false)\n  --description                      swagger description\n  --version                          document version\n  --depth                            aggregate depth (default = 2)\n  --dry-run                          dry-run mode (outputs on stdout)\n  --output                           output filename (default schema.json)\n  --host                             swagger host (default localhost:3030)\n  --format                           file format (default json) \n  --help                             show help\n  --disable-path-number              disable number type for path params (default: false)\nExamples:\n  agreed-typed gen-swagger --path ./agreed.ts --output schema.json\n`.trim();\n\nexport function generate(arg) {\n  const argv = minimist(arg, {\n    string: [\n      \"path\",\n      \"title\",\n      \"description\",\n      \"version\",\n      \"depth\",\n      \"output\",\n      \"host\",\n      \"format\",\n    ],\n    boolean: [\"dry-run\", \"disable-path-number\", \"minify\"],\n  });\n\n  if (argv.help) {\n    showHelp(0, usage);\n    return;\n  }\n\n  if (!argv.path) {\n    showHelp(1, usage);\n    return;\n  }\n\n  const depth = argv.depth ? Number(argv.depth) : 2;\n\n  const swagger = run({\n    path: argv.path,\n    description: argv.description,\n    version: argv.version,\n    depth,\n    title: argv.title,\n    host: argv.host,\n    disablePathNumber: argv[\"disable-path-number\"],\n  });\n\n  write(swagger, {\n    dryRun: argv[\"dry-run\"],\n    format: argv.format,\n    filename: argv.output,\n    minify: argv.minify,\n  });\n}\n\nfunction write(\n  obj,\n  { dryRun, format, filename, minify } = {\n    dryRun: true,\n    format: \"json\",\n    filename: \"schema\",\n    minify: false,\n  }\n) {\n  const output =\n    format === \"yaml\"\n      ? \"# auto generated by agreed-typed\\n\" + YAML.stringify(obj)\n      : minify\n      ? JSON.stringify(obj)\n      : JSON.stringify(obj, null, 4);\n  if (dryRun) {\n    process.stdout.write(output);\n    return;\n  }\n  fs.writeFileSync(\n    path.resolve(process.cwd(), `${filename || \"schema\"}.${format || \"json\"}`),\n    output\n  );\n}\n\n// testing entry point\nexport function run({\n  path: pt,\n  depth,\n  title,\n  description,\n  version,\n  host,\n  disablePathNumber,\n}) {\n  const agreedPath = path.resolve(process.cwd(), pt);\n  require(agreedPath);\n\n  const currentModule = require.main.children.find(\n    (m) => m.filename === __filename\n  );\n\n  const agreedRoot = currentModule.children.find(\n    (m) => m.filename === agreedPath\n  );\n\n  const { mods, files } = aggregateModules(agreedRoot, depth);\n\n  const metaInfos = mods.reduce((p, a) => {\n    p = p.concat(...a.asts.map((m) => m.meta));\n    return p;\n  }, []);\n\n  const schemas = generateSchema(files, metaInfos);\n  const defs = schemas\n    .filter((s) => s.schema.definitions)\n    .reduce((p, c) => {\n      return {\n        ...p,\n        ...c.schema.definitions,\n      };\n    }, {});\n\n  const specs = schemas.reduce((prev: ReducedSpec[], current) => {\n    const exist = prev.find((p) => {\n      return isSamePath(p.path, current.path);\n    });\n    if (exist) {\n      exist.schemas.push(current);\n      return prev;\n    }\n    prev.push({ path: current.path, schemas: [current] });\n    return prev;\n  }, []);\n  return generateSwagger(\n    specs,\n    title,\n    description,\n    version,\n    host,\n    defs,\n    disablePathNumber\n  );\n}\n\nexport interface ReducedSpec {\n  path: string[];\n  schemas: {\n    name: string;\n    path: string[];\n    doc: object;\n    schema: Definition;\n  }[];\n}\n\nfunction aggregateModules(mod: NodeModule, lim = 2) {\n  const files = [];\n  const rec = (module: NodeModule, asts, depth, limit) => {\n    if (depth >= limit || files.includes(module.filename)) {\n      return asts;\n    }\n    if (\n      module.filename.endsWith(\".ts\") &&\n      !module.filename.includes(\"node_modules\")\n    ) {\n      files.push(module.filename);\n      const file = fs.readFileSync(module.filename, \"utf-8\");\n      const ast = parse(file, { comment: true, loc: true });\n\n      const docs = ast.comments\n        .filter((c) => {\n          return c.type === \"Block\";\n        })\n        .reduce((p, d) => {\n          const comment = `/*${d.value}*/`;\n          const docAST = doctrine.parse(comment, { unwrap: true });\n          p[d.loc.end.line] = { ast: docAST };\n          return p;\n        }, {});\n\n      const mods = ast.body.reduce((prev, current) => {\n        if (current.type !== AST_NODE_TYPES.ExportNamedDeclaration) {\n          return prev;\n        }\n        const c: ExportNamedDeclaration = current as any;\n\n        if (\n          (c.declaration.type as any) !== AST_NODE_TYPES.TSTypeAliasDeclaration\n        ) {\n          return prev;\n        }\n\n        const declaration = c.declaration as any;\n\n        if (\n          declaration.typeAnnotation.type !== AST_NODE_TYPES.TSTypeReference\n        ) {\n          return prev;\n        }\n\n        const annotation = declaration.typeAnnotation;\n\n        if ((annotation.typeName as Identifier).name === \"APIDef\") {\n          const params: any = annotation.typeParameters;\n\n          const pathArr = params.params[1].elementTypes.map((p) => {\n            if (p.literal) {\n              return p.literal.value; // string\n            }\n            return p.typeParameters.params[0].literal.value;\n          });\n\n          const doc = docs[c.declaration.loc.start.line - 1];\n          prev.push({\n            meta: {\n              name: declaration.id.name,\n              path: pathArr,\n              doc,\n            },\n            ast: current,\n          });\n        }\n\n        return prev;\n      }, []);\n\n      if (mods.length > 0) {\n        asts.push({ filename: module.filename, asts: mods });\n      }\n    }\n\n    module.children.forEach((m) => {\n      rec(m, asts, depth + 1, limit);\n    });\n\n    return asts;\n  };\n\n  return { mods: rec(mod, [], 0, lim), files };\n}\n\nfunction isSamePath(a: string[], b: string[]): boolean {\n  if (a.length !== b.length) {\n    return false;\n  }\n\n  let equal = true;\n  a.forEach((r, i) => {\n    const l = b[i];\n    if (r === l) {\n      return;\n    }\n    if (r.startsWith(\":\") && l.startsWith(\":\")) {\n      return;\n    }\n\n    equal = false;\n  });\n\n  return equal;\n}\n"
  },
  {
    "path": "packages/typed/src/generate-schema.ts",
    "content": "import * as ts from \"typescript\";\nimport * as TJS from \"typescript-json-schema\";\n\nexport interface Spec {\n  name: string;\n  path: string[];\n  doc: object;\n  schema: TJS.Definition;\n}\n\nexport function generateSchema(fileNames, meta): Spec[] {\n  const settings: TJS.PartialArgs = { required: true, ignoreErrors: true };\n  const compilerOptions: ts.CompilerOptions = {\n    noEmit: true,\n    noEmitOnError: false,\n    emitDecoratorMetadata: true,\n    experimentalDecorators: true,\n    target: ts.ScriptTarget.ES5,\n    module: ts.ModuleKind.CommonJS,\n    allowUnusedLabels: true\n  };\n\n  const host = ts.createCompilerHost(compilerOptions);\n  const orgSourceFile = host.getSourceFile;\n  host.getSourceFile = (\n    fileName: string,\n    languageVersion: ts.ScriptTarget,\n    onError?: (message: string) => void,\n    shouldCreateNewSourceFile?: boolean\n  ): ts.SourceFile | undefined => {\n    const src = orgSourceFile(\n      fileName,\n      languageVersion,\n      onError,\n      shouldCreateNewSourceFile\n    );\n    const result = ts.transform(src, [\n      transformPropertySignature,\n      transformTypeReferenceNode,\n      transformCaptureTypeArguments\n    ]);\n    result.dispose();\n    return result.transformed[0] as ts.SourceFile;\n  };\n  host.getSourceFileByPath = undefined;\n\n  const program = TJS.getProgramFromFiles(fileNames, compilerOptions);\n\n  const generator = TJS.buildGenerator(program as unknown as TJS.Program, settings);\n  return meta.map(m => {\n    return {\n      ...m,\n      schema: generator.getSchemaForSymbol(m.name)\n    };\n  });\n}\n\n// PropertyとしてPlaceholderを使う場合\nconst transformPropertySignature = <T extends ts.Node>(\n  context: ts.TransformationContext\n) => (rootNode: T) => {\n  function visit(node: ts.Node): ts.Node {\n    node = ts.visitEachChild(node, visit, context);\n    if (!ts.isPropertySignature(node)) {\n      return node;\n    }\n    const ps = node;\n    if (!ps.type || !ts.isTypeReferenceNode(ps.type)) {\n      return node;\n    }\n    const tr = ps.type;\n    if ((tr.typeName as any).escapedText === \"Placeholder\") {\n      return ts.factory.updatePropertySignature(\n        ps,\n        ps.modifiers,\n        ps.name,\n        ps.questionToken,\n        tr.typeArguments[0]\n      );\n    }\n    return node;\n  }\n  return ts.visitNode(rootNode, visit);\n};\n\n// 型パラメータにPlaceholderを使う場合\nconst transformTypeReferenceNode = <T extends ts.Node>(\n  context: ts.TransformationContext\n) => (rootNode: T) => {\n  function visit(node: ts.Node): ts.Node {\n    node = ts.visitEachChild(node, visit, context);\n    if (!ts.isTypeReferenceNode(node)) {\n      return node;\n    }\n    const tr = node;\n    if (!tr.typeArguments) {\n      return tr;\n    }\n    const args = tr.typeArguments.map(ta => {\n      if (!ts.isTypeReferenceNode(ta)) {\n        return ta;\n      }\n      const tref = ta;\n      if ((tref.typeName as any).escapedText === \"Placeholder\") {\n        return tref.typeArguments[0];\n      }\n      return tref;\n    }) as any;\n    return ts.factory.updateTypeReferenceNode(tr, tr.typeName, args);\n  }\n  return ts.visitNode(rootNode, visit);\n};\n\nconst transformCaptureTypeArguments = <T extends ts.Node>(\n  context: ts.TransformationContext\n) => (rootNode: T) => {\n  function visit(node: ts.Node): ts.Node {\n    node = ts.visitEachChild(node, visit, context);\n    if (!ts.isTupleTypeNode(node)) {\n      return node;\n    }\n    const tp = node as ts.TupleTypeNode;\n    const et: ts.NodeArray<ts.TypeNode> = tp.elements.map(e => {\n      if (!ts.isTypeReferenceNode(e)) {\n        return e;\n      }\n      if (\n        (e.typeName as ts.Identifier).escapedText === \"Capture\" &&\n        e.typeArguments.length === 2\n      ) {\n        return e.typeArguments[1];\n      }\n\n      return e;\n    }) as any;\n    return ts.factory.updateTupleTypeNode(tp, et);\n  }\n  return ts.visitNode(rootNode, visit);\n};\n"
  },
  {
    "path": "packages/typed/src/generate-swagger.ts",
    "content": "import { ReducedSpec } from \"./commands/gen-swagger\";\n\nexport function generateSwagger(\n  specs: ReducedSpec[],\n  title = \"Agreed\",\n  description = \"Generate via agreed-typed\",\n  version = \"0.0.1\",\n  host = \"localhost:3000\",\n  definitions,\n  disablePathNumber\n) {\n  const swagger = {\n    swagger: \"2.0\",\n    info: {\n      title,\n      description,\n      version\n    },\n    host,\n    produces: [\"application/json\"],\n    consumes: [\"application/json\"],\n    paths: generatePath(specs, definitions, disablePathNumber),\n    definitions\n  };\n\n  return swagger;\n}\n\nfunction generatePath(\n  specs: ReducedSpec[],\n  definitions: any,\n  disablePathNumber: boolean\n) {\n  const genpath = (schema: ReducedSpec) => {\n    const pathParam = schema.path.reduce(\n      (p, c, i) => {\n        if (c.startsWith(\":\")) {\n          const placeholder = c.slice(1);\n          p.name += `/{${placeholder}}`;\n          p.params.push({ param: placeholder, idx: i });\n          return p;\n        }\n        p.name += \"/\" + c;\n        return p;\n      },\n      { name: \"\", params: [] }\n    );\n\n    const schemas = schema.schemas.reduce((p, c: any) => {\n      const {\n        query,\n        method,\n        headers,\n        body,\n        path\n      } = c.schema.properties.request.properties;\n      if (p[method.enum[0]]) {\n        throw new Error(\"generator duplicated specs\");\n      }\n      let parameters = [\n        ...parsePathParam(pathParam.params, path, disablePathNumber),\n        ...parseProperties(query, \"query\", definitions),\n        ...parseProperties(headers, \"header\", definitions)\n      ];\n\n      if (body && (body.properties || body.$ref)) {\n        parameters = parameters.concat(parseBody(body));\n      }\n      const responses = parseResponse(c.schema.properties.response);\n\n      const doc: any = !c.doc\n        ? {}\n        : {\n            description: c.doc.ast.description,\n            ...c.doc.ast.tags.reduce((a, t) => {\n              a[t.title] = t.description;\n              return a;\n            }, {})\n          };\n\n      p[method.enum[0].toLowerCase()] = { parameters, responses, ...doc };\n\n      return p;\n    }, {});\n\n    return { [pathParam.name]: schemas };\n  };\n\n  return specs.reduce((p, c) => {\n    return {\n      ...p,\n      ...genpath(c)\n    };\n  }, {});\n}\n\nfunction parseBody(body: object): object {\n  return {\n    in: \"body\",\n    name: \"request body\",\n    required: true,\n    schema: body\n  };\n}\n\nfunction parseResponse(resp: any): object {\n  const responses = resp.anyOf ? resp.anyOf.map(a => a.allOf) : [resp.allOf];\n  return responses.reduce((p, c) => {\n    const headers = c.find(r => r.properties.headers);\n    const statusCode = c.find(r => r.properties.status);\n    const body = c.find(r => r.properties.body);\n\n    const headerProps = headers ? headers.properties.headers.properties : {};\n    const h = Object.keys(headerProps).reduce((m, current) => {\n      return {\n        ...m,\n        [current]: {\n          description: current,\n          type: headerProps[current].type\n        }\n      };\n    }, {});\n    const description =\n      statusCode.properties.status.enum[0] > 399 ? \"Failure\" : \"Success\";\n    if (body.properties.body.type === \"undefined\") {\n      return {\n        ...p,\n        [`${statusCode.properties.status.enum[0]}`]: {\n          description,\n          headers: h\n        }\n      };\n    }\n    return {\n      ...p,\n      [`${statusCode.properties.status.enum[0]}`]: {\n        description,\n        headers: h, // headers ? parseProperties(headers, \"header\") : {},\n        schema: body.properties.body\n      }\n    };\n  }, {});\n}\n\nfunction parsePathParam(\n  paths: Array<{ param: string; idx: number }>,\n  path: any,\n  disablePathNumber: boolean\n): object[] {\n  return paths.map(p => {\n    const param = path.items[p.idx];\n    // workaround\n    if (disablePathNumber && param.type === \"number\") {\n      param.type = \"integer\";\n    }\n    return {\n      in: \"path\",\n      name: p.param,\n      required: true,\n      ...param\n    };\n  });\n}\n\nfunction parseProperties(query, inname, definitions): object[] {\n  const { properties } = query;\n  return Object.keys(properties).map(k => {\n    if (properties[k].$ref) {\n      const defName = `${properties[k].$ref}`.split(\"/\").slice(-1)[0];\n      const def = definitions[defName];\n      return {\n        in: inname,\n        name: k,\n        ...def\n      };\n    }\n    if (properties[k].enum) {\n      return {\n        in: inname,\n        required: query.required ? query.required.includes(k) : false,\n        type: properties[k].type,\n        name: k,\n        enum: properties[k].enum,\n        default: properties[k].enum[0]\n      };\n    }\n    return {\n      in: inname,\n      required: query.required ? query.required.includes(k) : false,\n      type: properties[k].type,\n      name: k,\n      format: properties[k].format,\n      ...properties[k]\n    };\n  });\n}\n"
  },
  {
    "path": "packages/typed/src/hook.ts",
    "content": "import * as fs from \"fs\";\nimport * as ts from \"typescript\";\n\nconst transpile = (src, options = {}) => {\n  const res = ts.transpileModule(\n    src,\n    options || {\n      compilerOptions: { module: ts.ModuleKind.CommonJS }\n    }\n  ).outputText;\n  return res;\n};\n\nrequire.extensions[\".ts\"] = (module: any, file) => {\n  const src = fs.readFileSync(file).toString(\"utf-8\");\n  const agree = transpile(src, {});\n  module._compile(agree, file);\n};\n"
  },
  {
    "path": "packages/typed/src/types.ts",
    "content": "export type GET = \"GET\";\nexport type HEAD = \"HEAD\";\nexport type POST = \"POST\";\nexport type PUT = \"PUT\";\nexport type PATCH = \"PATCH\";\nexport type DELETE = \"DELETE\";\n\nexport type HTTPMethods = GET | HEAD | POST | PATCH | PUT | DELETE;\n\nexport type Capture<T extends string, P = string> = P extends string\n  ? (T | string)\n  : (P | string);\n\nexport type Placeholder<T> = T | string;\n\nexport type Path = Array<string | Capture<string, any>>;\n\nexport type RequestBody<Method extends HTTPMethods> = Method extends\n  | POST\n  | PATCH\n  | PUT\n  ? object\n  : undefined;\n\nexport type Headers = object;\n\nexport type Query = object;\n\nexport type RequestDef<\n  P extends Path,\n  H extends Headers,\n  Q extends Query,\n  M extends HTTPMethods,\n  B extends RequestBody<M>\n> = {\n  path: P;\n  method: M;\n  headers?: H;\n  query?: Q;\n  values?: object;\n  body: B;\n};\n\nexport type Status<C extends number, T extends string> = {\n  status: C;\n  statusText?: T;\n};\n\nexport type Success200 = Status<200, \"OK\">;\nexport type Success201 = Status<201, \"Created\">;\nexport type Success202 = Status<202, \"Accepted\">;\nexport type Success203 = Status<203, \"Non-Authoritative Information\">;\nexport type Success204 = Status<204, \"No Content\">;\nexport type Success205 = Status<205, \"Reset Content\">;\nexport type Success206 = Status<206, \"Parial Content\">;\nexport type Success207 = Status<207, \"Multi-Status\">;\nexport type Success208 = Status<208, \"Already Reported\">;\nexport type Success226 = Status<226, \"IM Used\">;\n\nexport type Redirection300 = Status<300, \"Multiple Choices\">;\nexport type Redirection301 = Status<301, \"Moved Permanently\">;\nexport type Redirection302 = Status<302, \"Found\">;\nexport type Redirection303 = Status<303, \"See Other\">;\nexport type Redirection304 = Status<304, \"Not Modified\">;\nexport type Redirection305 = Status<305, \"Use Proxy\">;\nexport type Redirection307 = Status<307, \"Temporary Redirect\">;\nexport type Redirection308 = Status<308, \"Permanent Redirect\">;\n\n// 40x client error\nexport type Error400 = Status<400, \"Bad Request\">;\nexport type Error401 = Status<401, \"Unauthorized\">;\nexport type Error402 = Status<402, \"Payment Required\">;\nexport type Error403 = Status<403, \"Forbidden\">;\nexport type Error404 = Status<404, \"Not Found\">;\nexport type Error405 = Status<405, \"Method Not Allowed\">;\nexport type Error406 = Status<406, \"Not Acceptable\">;\nexport type Error407 = Status<407, \"Proxy Authentication Required\">;\nexport type Error408 = Status<408, \"Request Timeout\">;\nexport type Error409 = Status<409, \"Conflict\">;\nexport type Error410 = Status<410, \"Gone\">;\nexport type Error411 = Status<411, \"Length Required\">;\nexport type Error412 = Status<412, \"Precondition Failed\">;\nexport type Error413 = Status<413, \"Payload Too Large\">;\nexport type Error414 = Status<414, \"URI Too Long\">;\nexport type Error415 = Status<415, \"Unsupported Media Type\">;\nexport type Error416 = Status<416, \"Range Not Satisfiable\">;\nexport type Error417 = Status<417, \"Expectation Failed\">;\nexport type Error418 = Status<418, \"I'm teapot\">;\nexport type Error421 = Status<421, \"Misdirected Request\">;\nexport type Error422 = Status<422, \"Unprocessable Entity\">;\nexport type Error423 = Status<423, \"Locked\">;\nexport type Error424 = Status<424, \"Failed Dependency\">;\nexport type Error425 = Status<425, \"Too Early\">;\nexport type Error426 = Status<426, \"Upgrade Required\">;\nexport type Error451 = Status<451, \"Unavailable For Legal Reasons\">;\n\n// 50x server error\nexport type Error500 = Status<500, \"Internal Server Error\">;\nexport type Error501 = Status<501, \"Not Implemented\">;\nexport type Error502 = Status<502, \"Bad Gateway\">;\nexport type Error503 = Status<503, \"Service Unavailable\">;\nexport type Error504 = Status<504, \"Gateway Timeout\">;\nexport type Error505 = Status<505, \"HTTP version Not Supported\">;\nexport type Error506 = Status<506, \"Variant Also Negotiates\">;\nexport type Error507 = Status<507, \"Insufficient Storage\">;\nexport type Error508 = Status<508, \"Loop Detected\">;\nexport type Error509 = Status<509, \"Bandwidth Limit Exceeded\">;\nexport type Error510 = Status<510, \"Not Extended\">;\nexport type Error511 = Status<511, \"Network Authentication Required\">;\n\nexport type ResponseBody = object;\n\nexport type ResponseDef<\n  S extends Status<number, string>,\n  B extends ResponseBody\n> = {\n  body?: S extends Success204 ? undefined : B;\n} & S;\n\nexport type APIDef<\n  M extends HTTPMethods,\n  P extends Path,\n  ReqHeader extends Headers,\n  Q extends Query,\n  ReqBody extends RequestBody<M>,\n  RespHeader extends Headers,\n  Resp extends ResponseDef<Status<number, string>, object>\n> = {\n  title?: string;\n  description?: string;\n  request: RequestDef<P, ReqHeader, Q, M, ReqBody>;\n  response: {\n    headers?: RespHeader;\n    values?: object;\n  } & Resp;\n};\n\nexport function convert(...apis: Array<{ request }>) {\n  return apis.map(a => {\n    const { path } = a.request;\n    if (typeof path === \"string\") {\n      return a;\n    }\n    a.request.path = \"/\" + path.join(\"/\");\n    return a;\n  });\n}\n\n/**\n * @TJS-type integer\n */\nexport type Integer = number;\n\n/**\n * @TJS-type integer\n * @minimum 0\n * @maximum 4294967295\n */\nexport type UInt32 = number;\n\n/**\n * @TJS-type integer\n * @minimum 0\n * @maximum 18446744073709551615\n */\nexport type UInt64 = number;\n\n/**\n * internal API, only for go-swagger\n * @param obj\n */\nexport function replace(obj) {\n  if (typeof obj !== \"object\") {\n    return obj;\n  }\n  if (obj == null) {\n    return true;\n  }\n  if (obj.properties) {\n    const required = obj.required || [];\n    const properties = obj.properties || {};\n\n    obj.properties = Object.keys(properties).reduce(\n      (p, prop) => {\n        const currentProp = required.includes(prop)\n          ? {\n              ...p[prop]\n            }\n          : {\n              ...p[prop],\n              \"x-nullable\": true\n            };\n\n        return {\n          ...p,\n          [prop]: currentProp\n        };\n      },\n      { ...properties }\n    );\n  }\n\n  return Array.isArray(obj)\n    ? obj.map(replace)\n    : Object.keys(obj).reduce((p, c) => {\n        p[c] = replace(obj[c]);\n        return p;\n      }, {});\n}\n"
  },
  {
    "path": "packages/typed/src/util.ts",
    "content": "export function showHelp(exitcode, help) {\n  process.stdout.write(help);\n  process.exit(exitcode);\n}\n\nexport const flatten = (arr1: any[]) =>\n  arr1.reduce((acc, val) => acc.concat(val), []);\n"
  },
  {
    "path": "packages/typed/tsconfig.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"compilerOptions\": {\n    \"target\": \"es2015\",\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"jsx\": \"preserve\",\n    \"moduleResolution\": \"node\",\n    \"allowSyntheticDefaultImports\": true,\n    \"removeComments\": false,\n    \"preserveConstEnums\": true,\n    \"sourceMap\": true,\n    \"skipLibCheck\": true,\n    \"baseUrl\": \".\",\n    \"lib\": [\n      \"dom\",\n      \"es2016\"\n    ],\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"outDir\": \"lib\"\n  },\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\n    \"node_modules\",\n    \"src/__tests__/**\",\n    \"src/commands/__tests__/**\"\n  ]\n}\n"
  },
  {
    "path": "packages/typed/tslint.json",
    "content": "{\n  \"extends\": [\n    \"tslint:latest\",\n    \"tslint-config-prettier\",\n    \"tslint-plugin-prettier\"\n  ],\n  \"rules\": {\n    \"prettier\": true,\n    \"no-submodule-imports\": false,\n    \"interface-over-type-literal\": false,\n    \"object-literal-sort-keys\": false,\n    \"interface-name\": [false, \"always-prefix\"],\n    \"no-implicit-dependencies\": [false, \"dev\"],\n    \"no-bitwise\": false\n  }\n}\n"
  },
  {
    "path": "packages/ui/.babelrc",
    "content": "{\n    \"presets\": [\n        \"@babel/preset-react\"\n    ]\n}"
  },
  {
    "path": "packages/ui/.eslintrc.json",
    "content": "{\n  \"env\": {\n    \"browser\": true,\n    \"commonjs\": true,\n    \"es6\": true,\n    \"node\": true,\n    \"jest\": true\n  },\n  \"parser\": \"@babel/eslint-parser\",\n  \"parserOptions\": {\n    \"ecmaVersion\": 2020,\n    \"ecmaFeatures\": {\n      \"jsx\": true\n    },\n    \"babelOptions\": {\n      \"presets\": [\"@babel/preset-react\"]\n    },\n    \"requireConfigFile\": false,\n    \"sourceType\": \"module\"\n  },\n  \"settings\": {\n    \"react\": {\n      \"version\": \"detect\"\n    }\n  },\n  \"extends\": [\n    \"eslint:recommended\",\n    \"plugin:react/recommended\",\n    \"prettier\"\n  ],\n  \"plugins\": [\n    \"react\",\n    \"prettier\"\n  ],\n  \"rules\": {\n    \"linebreak-style\": [\n      \"error\",\n      \"unix\"\n    ],\n    \"quotes\": [\n      \"error\",\n      \"single\"\n    ],\n    \"semi\": [\n      \"error\",\n      \"never\"\n    ],\n    \"prettier/prettier\": \"error\"\n  }\n}\n"
  },
  {
    "path": "packages/ui/.gitignore",
    "content": "# See https://help.github.com/ignore-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n\n# testing\n/coverage\n\n# production\n/build/service-worker.js\n/build/asset-manifest.json\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "packages/ui/.prettierrc.yml",
    "content": "---\nprintWidth: 100\ntabWidth: 2\nsingleQuote: true\ntrailingComma: none\njsxBracketSameLine: true\nsemi: false\n\n"
  },
  {
    "path": "packages/ui/LICENSE",
    "content": "The MIT License\nCopyright © 2018 Recruit Technologies Co.,Ltd.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "packages/ui/README.md",
    "content": "# Agreed UI\n\nUI for [Agreed](https://www.npmjs.com/package/agreed-core)\n\n![ScreenShot](https://raw.githubusercontent.com/recruit-tech/agreed-ui/master/screenshot.png)\n\n# Install\n\n```\n$ npm install agreed-ui --save-dev\n```\n\n# Usage\n\n```\n$ agreed-ui --path ./test/agreed.json --port 3000\n```\nServe with [Express](https://www.npmjs.com/package/express)\nOpen http://localhost:3000 to view it in the browser.\n\n```\n$ agreed-ui build --path ./test/agreed.json --dest ./build\n```\nBuilds the app for static-hosting to the build folder\n\n# Features\n\n## Set title and description to contract\n\n```\n{\n  title: 'get store information',\n  description: 'get store information',\n  request: {\n    ...\n  },\n  response: {\n    ...\n  }\n}\n```\n\ntitle and descripion will be displayed at naviation and each section's title\n\n# Development\n\n`npm run start:dev -- --path=./test/agrees/agrees.js `"
  },
  {
    "path": "packages/ui/bin/agreed-ui.js",
    "content": "#!/usr/bin/env node\nconst path = require('path')\nconst spawn = require('child_process').spawn\nconst minimist = require('minimist')\nconst colo = require('colo')\nconst execArgv = minimist(process.execArgv)\nconst argv = minimist(process.argv.slice(2))\n\nfunction showHelp(exitcode) {\n  console.log(`\n    agreed-ui [--path agreed path file (required)][--port request server port default 3000]\n    agreed-ui build [--path agreed path file (required)][--dest output directory(required)]\n    agreed-ui --path ./agreed.js --port 4000\n    agreed-ui build --path ./agreed.js --dest ./build\n  `)\n  process.exit(exitcode)\n}\n\nconst command = argv['_'][0] || 'start'\n\nif (argv.help || command === 'help') {\n  showHelp(0)\n}\n\nif (argv.version || command === 'version') {\n  const pack = require('../package.json')\n  console.log(pack.version)\n  process.exit(0)\n}\n\nif (!argv.path) {\n  console.error(colo.red('[agreed-ui]: --path option is required'))\n  showHelp(1)\n}\n\nif (command === 'build' && !argv.dest) {\n  console.error(colo.red('[agreed-ui]: --dest option is required'))\n  showHelp(1)\n}\nconst npm = /^win/.test(process.platform) ? 'npm.cmd' : 'npm'\n\nconst child = spawn(\n  npm,\n  [\n    'run',\n    command,\n    '--',\n    `--path=${path.resolve(process.cwd(), argv.path)}`,\n    argv.dest && `--dest=${path.resolve(process.cwd(), argv.dest)}`,\n    argv.port && `--port=${argv.port || 3000}`,\n  ].filter(Boolean),\n  { cwd: path.resolve(__dirname, '../') }\n)\n\nchild.stdout.on('data', function(data) {\n  process.stdout.write(data)\n})\n\nchild.stderr.on('data', function(data) {\n  process.stdout.write(data)\n})\n"
  },
  {
    "path": "packages/ui/build/index.html",
    "content": "<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,shrink-to-fit=no\"><meta name=\"theme-color\" content=\"#000000\"><link rel=\"manifest\" href=\"./manifest.json\"><link rel=\"shortcut icon\" href=\"./favicon.png\"><title>Agreed UI</title><script defer=\"defer\" src=\"./static/js/main.9b5da592.js\"></script><link href=\"./static/css/main.4e871676.css\" rel=\"stylesheet\"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id=\"root\"></div><script>window.TITLE='\"<%= title %>\"',window.AGREES=\"<%= agrees %>\"</script></body></html>"
  },
  {
    "path": "packages/ui/build/precache-manifest.c7cb397614ac16fe18525a8ed4105b10.js",
    "content": "self.__precacheManifest = (self.__precacheManifest || []).concat([\n  {\n    \"revision\": \"66cb8cbf26c628a82a88f884b999224e\",\n    \"url\": \"./index.html\"\n  },\n  {\n    \"revision\": \"b6c3ee666303b94886fc\",\n    \"url\": \"./static/css/main.e92ec541.chunk.css\"\n  },\n  {\n    \"revision\": \"400027482ca9a973d5b8\",\n    \"url\": \"./static/js/2.b28c1fbe.chunk.js\"\n  },\n  {\n    \"revision\": \"b6c3ee666303b94886fc\",\n    \"url\": \"./static/js/main.ef43f0f5.chunk.js\"\n  },\n  {\n    \"revision\": \"f2bf705babb2ec4477fc\",\n    \"url\": \"./static/js/runtime-main.3336eaa2.js\"\n  }\n]);"
  },
  {
    "path": "packages/ui/build/static/css/main.e92ec541.chunk.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,400i|PT+Sans);:root{--color:#1a281f;--color-link:rgba(26,40,31,0.7);--color0:#fff;--color1:rgba(26,40,31,0.6);--color2:#635255;--color3:#ce7b91;--color4:#c0e8f9;--color5:#a4bfbd;--color-green:#66bb6a}*{margin:0;padding:0}a{color:rgba(26,40,31,.7);color:var(--color-link)}a:hover{color:#bbb}h1{font-size:1.5rem;margin:2rem 0}h2{font-size:1.2rem;margin:2rem 0 1rem}body{color:#1a281f;color:var(--color);font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,sans-serif;min-height:100vh}.wrap,body{display:flex;flex-direction:column}.wrap{align-items:stretch;height:100vh}header{align-items:center;background:#fff;box-shadow:0 0 2.25rem #9da5ab;display:flex;font-family:PT Sans,sans-serif;justify-content:space-between;padding:20px;position:relative;z-index:1}header h1{margin:0}header p{font-weight:700}.container{align-items:stretch;display:flex;flex:1 1}main{flex-grow:3;order:2;padding:20px 0}aside,main{overflow:auto;position:relative}aside{box-shadow:0 0 .5rem #9da5ab;font-weight:300;flex:1 1;order:1;padding:20px;min-width:300px}.search{margin:1rem 0}.search__input{border:none;border-bottom:2px solid #ddd;font-size:1rem;font-weight:300;padding:.5rem 0;-webkit-transition:border-color .1s ease-out;transition:border-color .1s ease-out;width:80%}.search__input:focus{outline:0;display:block;border-bottom:2px solid var(--color5)}.search__group{display:block;font-size:.9rem;margin-top:5px}nav{position:absolute;padding-bottom:20px}nav p{margin:4px 0}details{padding-bottom:7px}summary{color:var(--color5);cursor:pointer;font-size:.9rem;margin-bottom:4px;outline:none}details>p{padding-left:1em;margin-top:3px}details summary::-webkit-details-marker{-webkit-transform:translateY(1px) scale(.7);transform:translateY(1px) scale(.7);opacity:.5}.count{border-radius:8px;border:1px solid var(--color5);background:var(--color5);margin-left:5px;opacity:.6;padding:0 3px;position:relative;top:-1px}.count,.statusLabel{color:var(--color0);display:inline-block;font-size:.5rem}.statusLabel{border-radius:6px;padding:2px 4px;margin-right:.25rem;opacity:.8}.statusLabel--2{background:var(--color-green)}.statusLabel--3{background:var(--color4)}.statusLabel--4{background:var(--color3)}.statusLabel--5{background:var(--color5)}.method{margin-right:5px;font-size:12px;font-weight:300;font-style:normal;border:1px solid #999;color:#999;border-radius:2px;padding:2px 3px;display:inline-block}.method.get{color:#66bb6a;border-color:#66bb6a}.method.delete{color:#999;border-color:#999}.method.put{color:#9e9d24;border-color:#9e9d24}.method.post{color:#f9a825;border-color:#f9a825}.method.patch{color:#9c27b0;border-color:#9c27b0}.definitions{color:var(--color1);margin:1.5em 0}.definitions h1{font-size:1em;color:var(--color5);margin-top:0;margin-bottom:1em;padding-left:0}.definitions>dl,.definitions>p{margin:.25em 1em}.definitions dl dt{color:var(--color3);font-weight:700;font-style:italic}.definitions dl dt:after{content:\": \"}.definitions dl>*{display:inline-block;margin-right:.5em}button{background-color:initial;border:none;cursor:pointer;outline:none;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.body{color:var(--color1);padding:0}.body>.buttonGroup{margin-bottom:1em;padding:0 30px}.body>.code{background:#efefef;font-weight:300;font-size:.9rem;max-height:500px;margin:1em 0;overflow:auto;padding:2em}.body>.code ul{background:#efefef!important}.buttonGroup button{margin-right:1em}.tabButton{box-sizing:border-box;color:var(--color5);opacity:.4;font-size:1rem;font-weight:700;padding:0 1px 3px}.tabButton:hover{opacity:1}.tabButton:disabled{color:var(--color5);cursor:auto;opacity:1;border-bottom:2px solid var(--color5)}.onlyButton.tabButton:disabled{border:none}.contents>.agree{padding-top:2rem;margin-bottom:2rem}.contents>.agree:first-child{padding-top:0}.agree .definitions,.agree .description,.agree>h1,.agree>h2,.agree>section{padding:0 30px}.agree h2{color:var(--color);border-left:2px solid #aaa;padding-left:28px}.title{align-items:center;border-left:2px solid var(--color);display:flex;font-family:Open Sans,sans-serif;font-style:italic;margin:0}.title>*{margin-right:.6rem}.description{color:var(--color1);margin:.25rem 0}.contents section h2{color:var(--color);border-left:2px solid #aaa;padding-left:28px}.contents{position:absolute;width:100%}\n/*# sourceMappingURL=main.e92ec541.chunk.css.map */"
  },
  {
    "path": "packages/ui/build/static/js/2.b28c1fbe.chunk.js",
    "content": "(this[\"webpackJsonp@agreed/ui\"]=this[\"webpackJsonp@agreed/ui\"]||[]).push([[2],[function(e,t,n){\"use strict\";e.exports=n(87)},function(e,t){var n=e.exports={version:\"2.6.3\"};\"number\"==typeof __e&&(__e=n)},function(e,t,n){\"use strict\";var r=n(54),a=n(93),o=Object.prototype.toString;function i(e){return\"[object Array]\"===o.call(e)}function u(e){return null!==e&&\"object\"===typeof e}function l(e){return\"[object Function]\"===o.call(e)}function s(e,t){if(null!==e&&\"undefined\"!==typeof e)if(\"object\"!==typeof e&&(e=[e]),i(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.call(null,e[a],a,e)}e.exports={isArray:i,isArrayBuffer:function(e){return\"[object ArrayBuffer]\"===o.call(e)},isBuffer:a,isFormData:function(e){return\"undefined\"!==typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return\"undefined\"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return\"string\"===typeof e},isNumber:function(e){return\"number\"===typeof e},isObject:u,isUndefined:function(e){return\"undefined\"===typeof e},isDate:function(e){return\"[object Date]\"===o.call(e)},isFile:function(e){return\"[object File]\"===o.call(e)},isBlob:function(e){return\"[object Blob]\"===o.call(e)},isFunction:l,isStream:function(e){return u(e)&&l(e.pipe)},isURLSearchParams:function(e){return\"undefined\"!==typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"===typeof navigator||\"ReactNative\"!==navigator.product&&\"NativeScript\"!==navigator.product&&\"NS\"!==navigator.product)&&(\"undefined\"!==typeof window&&\"undefined\"!==typeof document)},forEach:s,merge:function e(){var t={};function n(n,r){\"object\"===typeof t[r]&&\"object\"===typeof n?t[r]=e(t[r],n):t[r]=n}for(var r=0,a=arguments.length;r<a;r++)s(arguments[r],n);return t},deepMerge:function e(){var t={};function n(n,r){\"object\"===typeof t[r]&&\"object\"===typeof n?t[r]=e(t[r],n):t[r]=\"object\"===typeof n?e({},n):n}for(var r=0,a=arguments.length;r<a;r++)s(arguments[r],n);return t},extend:function(e,t,n){return s(t,(function(t,a){e[a]=n&&\"function\"===typeof t?r(t,n):t})),e},trim:function(e){return e.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}}},function(e,t,n){\"use strict\";t.__esModule=!0;var r,a=n(142),o=(r=a)&&r.__esModule?r:{default:r};t.default=o.default||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}},function(e,t,n){var r=n(40)(\"wks\"),a=n(22),o=n(5).Symbol,i=\"function\"==typeof o;(e.exports=function(e){return r[e]||(r[e]=i&&o[e]||(i?o:a)(\"Symbol.\"+e))}).store=r},function(e,t){var n=e.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},function(e,t,n){e.exports=n(148)()},function(e,t,n){var r=n(5),a=n(1),o=n(64),i=n(10),u=n(9),l=function e(t,n,l){var s,c,f,d=t&e.F,p=t&e.G,b=t&e.S,h=t&e.P,m=t&e.B,y=t&e.W,v=p?a:a[n]||(a[n]={}),g=v.prototype,w=p?r:b?r[n]:(r[n]||{}).prototype;for(s in p&&(l=n),l)(c=!d&&w&&void 0!==w[s])&&u(v,s)||(f=c?w[s]:l[s],v[s]=p&&\"function\"!=typeof w[s]?l[s]:m&&c?o(f,r):y&&w[s]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(f):h&&\"function\"==typeof f?o(Function.call,f):f,h&&((v.virtual||(v.virtual={}))[s]=f,t&e.R&&g&&!g[s]&&i(g,s,f)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t){e.exports=function(e){return\"object\"===typeof e?null!==e:\"function\"===typeof e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(11),a=n(21);e.exports=n(13)?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(12),a=n(65),o=n(36),i=Object.defineProperty;t.f=n(13)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),a)try{return i(e,t,n)}catch(u){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(8);e.exports=function(e){if(!r(e))throw TypeError(e+\" is not an object!\");return e}},function(e,t,n){e.exports=!n(14)((function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a}))},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){var r=n(69),a=n(35);e.exports=function(e){return r(a(e))}},function(e,t,n){\"use strict\";t.__esModule=!0,t.default=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},function(e,t){e.exports={}},function(e,t,n){var r=n(68),a=n(41);e.exports=Object.keys||function(e){return r(e,a)}},function(e,t,n){\"use strict\";function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e)){var n=[],r=!0,a=!1,o=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(l){a=!0,o=l}finally{try{r||null==u.return||u.return()}finally{if(a)throw o}}return n}}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}n.d(t,\"a\",(function(){return r}))},function(e,t){e.exports=!0},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return\"Symbol(\".concat(void 0===e?\"\":e,\")_\",(++n+r).toString(36))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){e.exports={default:n(146),__esModule:!0}},function(e,t,n){\"use strict\";function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}n.d(t,\"a\",(function(){return r}))},function(e,t,n){\"use strict\";function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function a(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}n.d(t,\"a\",(function(){return a}))},function(e,t,n){\"use strict\";function r(e){return(r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}n.d(t,\"a\",(function(){return r}))},function(e,t,n){\"use strict\";function r(e){return(r=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function a(e){return(a=\"function\"===typeof Symbol&&\"symbol\"===r(Symbol.iterator)?function(e){return r(e)}:function(e){return e&&\"function\"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":r(e)})(e)}function o(e,t){return!t||\"object\"!==a(t)&&\"function\"!==typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}n.d(t,\"a\",(function(){return o}))},function(e,t,n){\"use strict\";function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function a(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}n.d(t,\"a\",(function(){return a}))},function(e,t,n){\"use strict\";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,n){\"use strict\";t.__esModule=!0;var r,a=n(32),o=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==(\"undefined\"===typeof t?\"undefined\":(0,o.default)(t))&&\"function\"!==typeof t?e:t}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=i(n(62)),a=i(n(126)),o=\"function\"===typeof a.default&&\"symbol\"===typeof r.default?function(e){return typeof e}:function(e){return e&&\"function\"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?\"symbol\":typeof e};function i(e){return e&&e.__esModule?e:{default:e}}t.default=\"function\"===typeof a.default&&\"symbol\"===o(r.default)?function(e){return\"undefined\"===typeof e?\"undefined\":o(e)}:function(e){return e&&\"function\"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?\"symbol\":\"undefined\"===typeof e?\"undefined\":o(e)}},function(e,t,n){\"use strict\";var r=n(114)(!0);n(63)(String,\"String\",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError(\"Can't call method on  \"+e);return e}},function(e,t,n){var r=n(8);e.exports=function(e,t){if(!r(e))return e;var n,a;if(t&&\"function\"==typeof(n=e.toString)&&!r(a=n.call(e)))return a;if(\"function\"==typeof(n=e.valueOf)&&!r(a=n.call(e)))return a;if(!t&&\"function\"==typeof(n=e.toString)&&!r(a=n.call(e)))return a;throw TypeError(\"Can't convert object to primitive value\")}},function(e,t,n){var r=n(12),a=n(117),o=n(41),i=n(39)(\"IE_PROTO\"),u=function(){},l=function(){var e,t=n(66)(\"iframe\"),r=o.length;for(t.style.display=\"none\",n(121).appendChild(t),t.src=\"javascript:\",(e=t.contentWindow.document).open(),e.write(\"<script>document.F=Object<\\/script>\"),e.close(),l=e.F;r--;)delete l.prototype[o[r]];return l()};e.exports=Object.create||function(e,t){var n;return null!==e?(u.prototype=r(e),n=new u,u.prototype=null,n[i]=e):n=l(),void 0===t?n:a(n,t)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(40)(\"keys\"),a=n(22);e.exports=function(e){return r[e]||(r[e]=a(e))}},function(e,t,n){var r=n(1),a=n(5),o=a[\"__core-js_shared__\"]||(a[\"__core-js_shared__\"]={});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:r.version,mode:n(20)?\"pure\":\"global\",copyright:\"\\xa9 2019 Denis Pushkarev (zloirock.ru)\"})},function(e,t){e.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(e,t,n){var r=n(11).f,a=n(9),o=n(4)(\"toStringTag\");e.exports=function(e,t,n){e&&!a(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){var r=n(35);e.exports=function(e){return Object(r(e))}},function(e,t,n){n(123);for(var r=n(5),a=n(10),o=n(17),i=n(4)(\"toStringTag\"),u=\"CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList\".split(\",\"),l=0;l<u.length;l++){var s=u[l],c=r[s],f=c&&c.prototype;f&&!f[i]&&a(f,i,s),o[s]=o.Array}},function(e,t,n){t.f=n(4)},function(e,t,n){var r=n(5),a=n(1),o=n(20),i=n(45),u=n(11).f;e.exports=function(e){var t=a.Symbol||(a.Symbol=o?{}:r.Symbol||{});\"_\"==e.charAt(0)||e in t||u(t,e,{value:i.f(e)})}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){\"use strict\";t.__esModule=!0;var r=i(n(135)),a=i(n(139)),o=i(n(32));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+(\"undefined\"===typeof t?\"undefined\":(0,o.default)(t)));e.prototype=(0,a.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(r.default?(0,r.default)(e,t):e.__proto__=t)}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=b(n(24)),a=b(n(30)),o=b(n(31)),i=b(n(48)),u=b(n(3)),l=b(n(0)),s=b(n(6)),c=b(n(76)),f=b(n(154)),d=b(n(74)),p=b(n(158));function b(e){return e&&e.__esModule?e:{default:e}}function h(e,t,n){var r=e.nodeType,a=e.data,o=e.collectionLimit,i=e.circularCache,s=e.keyPath,c=e.postprocessValue,b=e.sortObjectKeys,m=[];return(0,f.default)(r,a,b,o,t,n).forEach((function(t){if(t.to)m.push(l.default.createElement(p.default,(0,u.default)({},e,{key:\"ItemRange--\"+t.from+\"-\"+t.to,from:t.from,to:t.to,renderChildNodes:h})));else{var n=t.key,r=t.value,a=-1!==i.indexOf(r),f=l.default.createElement(d.default,(0,u.default)({},e,{postprocessValue:c,collectionLimit:o},{key:\"Node--\"+n,keyPath:[n].concat(s),value:c(r),circularCache:[].concat(i,[r]),isCircular:a,hideRoot:!1}));!1!==f&&m.push(f)}})),m}function m(e){return{expanded:!(!e.shouldExpandNode||e.isCircular)&&e.shouldExpandNode(e.keyPath,e.data,e.level)}}var y=function(e){function t(n){(0,a.default)(this,t);var r=(0,o.default)(this,e.call(this,n));return r.handleClick=function(){r.props.expandable&&r.setState({expanded:!r.state.expanded})},r.state=m(n),r}return(0,i.default)(t,e),t.prototype.componentWillReceiveProps=function(e){var t=m(e);m(this.props).expanded!==t.expanded&&this.setState(t)},t.prototype.shouldComponentUpdate=function(e,t){var n=this;return!!(0,r.default)(e).find((function(t){return\"circularCache\"!==t&&(\"keyPath\"===t?e[t].join(\"/\")!==n.props[t].join(\"/\"):e[t]!==n.props[t])}))||t.expanded!==this.state.expanded},t.prototype.render=function(){var e=this.props,t=e.getItemString,n=e.nodeTypeIndicator,r=e.nodeType,a=e.data,o=e.hideRoot,i=e.createItemString,s=e.styling,f=e.collectionLimit,d=e.keyPath,p=e.labelRenderer,b=e.expandable,m=this.state.expanded,y=m||o&&0===this.props.level?h((0,u.default)({},this.props,{level:this.props.level+1})):null,v=t(r,a,l.default.createElement(\"span\",s(\"nestedNodeItemType\",m),n),i(a,f)),g=[d,r,m,b];return o?l.default.createElement(\"li\",s.apply(void 0,[\"rootNode\"].concat(g)),l.default.createElement(\"ul\",s.apply(void 0,[\"rootNodeChildren\"].concat(g)),y)):l.default.createElement(\"li\",s.apply(void 0,[\"nestedNode\"].concat(g)),b&&l.default.createElement(c.default,{styling:s,nodeType:r,expanded:m,onClick:this.handleClick}),l.default.createElement(\"label\",(0,u.default)({},s.apply(void 0,[[\"label\",\"nestedNodeLabel\"]].concat(g)),{onClick:this.handleClick}),p.apply(void 0,g)),l.default.createElement(\"span\",(0,u.default)({},s.apply(void 0,[\"nestedNodeItemString\"].concat(g)),{onClick:this.handleClick}),v),l.default.createElement(\"ul\",s.apply(void 0,[\"nestedNodeChildren\"].concat(g)),y))},t}(l.default.Component);y.propTypes={getItemString:s.default.func.isRequired,nodeTypeIndicator:s.default.any,nodeType:s.default.string.isRequired,data:s.default.any,hideRoot:s.default.bool.isRequired,createItemString:s.default.func.isRequired,styling:s.default.func.isRequired,collectionLimit:s.default.number,keyPath:s.default.arrayOf(s.default.oneOfType([s.default.string,s.default.number])).isRequired,labelRenderer:s.default.func.isRequired,shouldExpandNode:s.default.func,level:s.default.number.isRequired,sortObjectKeys:s.default.oneOfType([s.default.func,s.default.bool]),isCircular:s.default.bool,expandable:s.default.bool},y.defaultProps={data:[],circularCache:[],level:0,expandable:!0},t.default=y},function(e,t,n){e.exports={default:n(155),__esModule:!0}},function(e,t){e.exports=function(e,t,n){return Math.min(Math.max(e,t),n)}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=b(n(16)),a=b(n(30)),o=b(n(31)),i=b(n(48)),u=b(n(3)),l=b(n(24)),s=b(n(0)),c=b(n(6)),f=b(n(74)),d=b(n(166)),p=n(78);function b(e){return e&&e.__esModule?e:{default:e}}var h=function(e){return e};function m(e){var t=function(e,t){var n={getArrowStyle:\"arrow\",getListStyle:\"nestedNodeChildren\",getItemStringStyle:\"nestedNodeItemString\",getLabelStyle:\"label\",getValueStyle:\"valueText\"},r=(0,l.default)(n).filter((function(e){return t[e]}));return r.length>0&&(e=\"string\"===typeof e?{extend:e}:(0,u.default)({},e),r.forEach((function(r){console.error('Styling method \"'+r+'\" is deprecated, use \"theme\" property instead'),e[n[r]]=function(e){for(var n=arguments.length,a=Array(n>1?n-1:0),o=1;o<n;o++)a[o-1]=arguments[o];var i=e.style;return{style:(0,u.default)({},i,t[r].apply(t,a))}}}))),e}(e.theme,e);return e.invertTheme&&(\"string\"===typeof t?t+=\":inverted\":t&&t.extend?t=\"string\"===typeof t?(0,u.default)({},t,{extend:t.extend+\":inverted\"}):(0,u.default)({},t,{extend:(0,p.invertTheme)(t.extend)}):t&&(t=(0,p.invertTheme)(t))),{styling:(0,d.default)(t)}}var y=function(e){function t(n){(0,a.default)(this,t);var r=(0,o.default)(this,e.call(this,n));return r.state=m(n),r}return(0,i.default)(t,e),t.prototype.componentWillReceiveProps=function(e){var t=this;[\"theme\",\"invertTheme\"].find((function(n){return e[n]!==t.props[n]}))&&this.setState(m(e))},t.prototype.shouldComponentUpdate=function(e){var t=this;return!!(0,l.default)(e).find((function(n){return\"keyPath\"===n?e[n].join(\"/\")!==t.props[n].join(\"/\"):e[n]!==t.props[n]}))},t.prototype.render=function(){var e=this.props,t=e.data,n=e.keyPath,a=e.postprocessValue,o=e.hideRoot,i=(e.theme,e.invertTheme,(0,r.default)(e,[\"data\",\"keyPath\",\"postprocessValue\",\"hideRoot\",\"theme\",\"invertTheme\"])),l=this.state.styling;return s.default.createElement(\"ul\",l(\"tree\"),s.default.createElement(f.default,(0,u.default)({},(0,u.default)({postprocessValue:a,hideRoot:o,styling:l},i),{keyPath:o?[]:n,value:a(t)})))},t}(s.default.Component);y.propTypes={data:c.default.oneOfType([c.default.array,c.default.object]).isRequired,hideRoot:c.default.bool,theme:c.default.oneOfType([c.default.object,c.default.string]),invertTheme:c.default.bool,keyPath:c.default.arrayOf(c.default.oneOfType([c.default.string,c.default.number])),postprocessValue:c.default.func,sortObjectKeys:c.default.oneOfType([c.default.func,c.default.bool])},y.defaultProps={shouldExpandNode:function(e,t,n){return 0===n},hideRoot:!1,keyPath:[\"root\"],getItemString:function(e,t,n,r){return s.default.createElement(\"span\",null,n,\" \",r)},labelRenderer:function(e){var t=e[0];return s.default.createElement(\"span\",null,t,\":\")},valueRenderer:h,postprocessValue:h,isCustomNode:function(){return!1},collectionLimit:50,invertTheme:!0},t.default=y},function(e,t,n){\"use strict\";var r=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function i(e){if(null===e||void 0===e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){r[e]=e})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(a){return!1}}()?Object.assign:function(e,t){for(var n,u,l=i(e),s=1;s<arguments.length;s++){for(var c in n=Object(arguments[s]))a.call(n,c)&&(l[c]=n[c]);if(r){u=r(n);for(var f=0;f<u.length;f++)o.call(n,u[f])&&(l[u[f]]=n[u[f]])}}return l}},function(e,t,n){\"use strict\";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t,n){\"use strict\";var r=n(2);function a(e){return encodeURIComponent(e).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(r.isURLSearchParams(t))o=t.toString();else{var i=[];r.forEach(t,(function(e,t){null!==e&&\"undefined\"!==typeof e&&(r.isArray(e)?t+=\"[]\":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),i.push(a(t)+\"=\"+a(e))})))})),o=i.join(\"&\")}if(o){var u=e.indexOf(\"#\");-1!==u&&(e=e.slice(0,u)),e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+o}return e}},function(e,t,n){\"use strict\";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){\"use strict\";(function(t){var r=n(2),a=n(99),o={\"Content-Type\":\"application/x-www-form-urlencoded\"};function i(e,t){!r.isUndefined(e)&&r.isUndefined(e[\"Content-Type\"])&&(e[\"Content-Type\"]=t)}var u={adapter:function(){var e;return\"undefined\"!==typeof t&&\"[object process]\"===Object.prototype.toString.call(t)?e=n(58):\"undefined\"!==typeof XMLHttpRequest&&(e=n(58)),e}(),transformRequest:[function(e,t){return a(t,\"Accept\"),a(t,\"Content-Type\"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(i(t,\"application/x-www-form-urlencoded;charset=utf-8\"),e.toString()):r.isObject(e)?(i(t,\"application/json;charset=utf-8\"),JSON.stringify(e)):e}],transformResponse:[function(e){if(\"string\"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:\"application/json, text/plain, */*\"}}};r.forEach([\"delete\",\"get\",\"head\"],(function(e){u.headers[e]={}})),r.forEach([\"post\",\"put\",\"patch\"],(function(e){u.headers[e]=r.merge(o)})),e.exports=u}).call(this,n(98))},function(e,t,n){\"use strict\";var r=n(2),a=n(100),o=n(55),i=n(102),u=n(103),l=n(59);e.exports=function(e){return new Promise((function(t,s){var c=e.data,f=e.headers;r.isFormData(c)&&delete f[\"Content-Type\"];var d=new XMLHttpRequest;if(e.auth){var p=e.auth.username||\"\",b=e.auth.password||\"\";f.Authorization=\"Basic \"+btoa(p+\":\"+b)}if(d.open(e.method.toUpperCase(),o(e.url,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d.onreadystatechange=function(){if(d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf(\"file:\"))){var n=\"getAllResponseHeaders\"in d?i(d.getAllResponseHeaders()):null,r={data:e.responseType&&\"text\"!==e.responseType?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:n,config:e,request:d};a(t,s,r),d=null}},d.onabort=function(){d&&(s(l(\"Request aborted\",e,\"ECONNABORTED\",d)),d=null)},d.onerror=function(){s(l(\"Network Error\",e,null,d)),d=null},d.ontimeout=function(){s(l(\"timeout of \"+e.timeout+\"ms exceeded\",e,\"ECONNABORTED\",d)),d=null},r.isStandardBrowserEnv()){var h=n(104),m=(e.withCredentials||u(e.url))&&e.xsrfCookieName?h.read(e.xsrfCookieName):void 0;m&&(f[e.xsrfHeaderName]=m)}if(\"setRequestHeader\"in d&&r.forEach(f,(function(e,t){\"undefined\"===typeof c&&\"content-type\"===t.toLowerCase()?delete f[t]:d.setRequestHeader(t,e)})),e.withCredentials&&(d.withCredentials=!0),e.responseType)try{d.responseType=e.responseType}catch(y){if(\"json\"!==e.responseType)throw y}\"function\"===typeof e.onDownloadProgress&&d.addEventListener(\"progress\",e.onDownloadProgress),\"function\"===typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener(\"progress\",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){d&&(d.abort(),s(e),d=null)})),void 0===c&&(c=null),d.send(c)}))}},function(e,t,n){\"use strict\";var r=n(101);e.exports=function(e,t,n,a,o){var i=new Error(e);return r(i,t,n,a,o)}},function(e,t,n){\"use strict\";var r=n(2);e.exports=function(e,t){t=t||{};var n={};return r.forEach([\"url\",\"method\",\"params\",\"data\"],(function(e){\"undefined\"!==typeof t[e]&&(n[e]=t[e])})),r.forEach([\"headers\",\"auth\",\"proxy\"],(function(a){r.isObject(t[a])?n[a]=r.deepMerge(e[a],t[a]):\"undefined\"!==typeof t[a]?n[a]=t[a]:r.isObject(e[a])?n[a]=r.deepMerge(e[a]):\"undefined\"!==typeof e[a]&&(n[a]=e[a])})),r.forEach([\"baseURL\",\"transformRequest\",\"transformResponse\",\"paramsSerializer\",\"timeout\",\"withCredentials\",\"adapter\",\"responseType\",\"xsrfCookieName\",\"xsrfHeaderName\",\"onUploadProgress\",\"onDownloadProgress\",\"maxContentLength\",\"validateStatus\",\"maxRedirects\",\"httpAgent\",\"httpsAgent\",\"cancelToken\",\"socketPath\"],(function(r){\"undefined\"!==typeof t[r]?n[r]=t[r]:\"undefined\"!==typeof e[r]&&(n[r]=e[r])})),n}},function(e,t,n){\"use strict\";function r(e){this.message=e}r.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},r.prototype.__CANCEL__=!0,e.exports=r},function(e,t,n){e.exports={default:n(113),__esModule:!0}},function(e,t,n){\"use strict\";var r=n(20),a=n(7),o=n(67),i=n(10),u=n(17),l=n(116),s=n(42),c=n(122),f=n(4)(\"iterator\"),d=!([].keys&&\"next\"in[].keys()),p=function(){return this};e.exports=function(e,t,n,b,h,m,y){l(n,t,b);var v,g,w,x=function(e){if(!d&&e in T)return T[e];switch(e){case\"keys\":case\"values\":return function(){return new n(this,e)}}return function(){return new n(this,e)}},k=t+\" Iterator\",E=\"values\"==h,_=!1,T=e.prototype,S=T[f]||T[\"@@iterator\"]||h&&T[h],C=S||x(h),O=h?E?x(\"entries\"):C:void 0,P=\"Array\"==t&&T.entries||S;if(P&&(w=c(P.call(new e)))!==Object.prototype&&w.next&&(s(w,k,!0),r||\"function\"==typeof w[f]||i(w,f,p)),E&&S&&\"values\"!==S.name&&(_=!0,C=function(){return S.call(this)}),r&&!y||!d&&!_&&T[f]||i(T,f,C),u[t]=C,u[k]=p,h)if(v={values:E?C:x(\"values\"),keys:m?C:x(\"keys\"),entries:O},y)for(g in v)g in T||o(T,g,v[g]);else a(a.P+a.F*(d||_),t,v);return v}},function(e,t,n){var r=n(115);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,a){return e.call(t,n,r,a)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){e.exports=!n(13)&&!n(14)((function(){return 7!=Object.defineProperty(n(66)(\"div\"),\"a\",{get:function(){return 7}}).a}))},function(e,t,n){var r=n(8),a=n(5).document,o=r(a)&&r(a.createElement);e.exports=function(e){return o?a.createElement(e):{}}},function(e,t,n){e.exports=n(10)},function(e,t,n){var r=n(9),a=n(15),o=n(118)(!1),i=n(39)(\"IE_PROTO\");e.exports=function(e,t){var n,u=a(e),l=0,s=[];for(n in u)n!=i&&r(u,n)&&s.push(n);for(;t.length>l;)r(u,n=t[l++])&&(~o(s,n)||s.push(n));return s}},function(e,t,n){var r=n(38);e.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(e){return\"String\"==r(e)?e.split(\"\"):Object(e)}},function(e,t,n){var r=n(15),a=n(71).f,o={}.toString,i=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&\"[object Window]\"==o.call(e)?function(e){try{return a(e)}catch(t){return i.slice()}}(e):a(r(e))}},function(e,t,n){var r=n(68),a=n(41).concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return r(e,a)}},function(e,t,n){var r=n(23),a=n(21),o=n(15),i=n(36),u=n(9),l=n(65),s=Object.getOwnPropertyDescriptor;t.f=n(13)?s:function(e,t){if(e=o(e),t=i(t,!0),l)try{return s(e,t)}catch(n){}if(u(e,t))return a(!r.f.call(e,t),e[t])}},function(e,t,n){var r=n(7),a=n(1),o=n(14);e.exports=function(e,t){var n=(a.Object||{})[e]||Object[e],i={};i[e]=t(n),r(r.S+r.F*o((function(){n(1)})),\"Object\",i)}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=d(n(3)),a=d(n(16)),o=d(n(0)),i=d(n(6)),u=d(n(150)),l=d(n(151)),s=d(n(159)),c=d(n(160)),f=d(n(165));function d(e){return e&&e.__esModule?e:{default:e}}var p=function(e){var t=e.getItemString,n=e.keyPath,i=e.labelRenderer,d=e.styling,p=e.value,b=e.valueRenderer,h=e.isCustomNode,m=(0,a.default)(e,[\"getItemString\",\"keyPath\",\"labelRenderer\",\"styling\",\"value\",\"valueRenderer\",\"isCustomNode\"]),y=h(p)?\"Custom\":(0,u.default)(p),v={getItemString:t,key:n[0],keyPath:n,labelRenderer:i,nodeType:y,styling:d,value:p,valueRenderer:b},g=(0,r.default)({},m,v,{data:p,isCustomNode:h});switch(y){case\"Object\":case\"Error\":case\"WeakMap\":case\"WeakSet\":return o.default.createElement(l.default,g);case\"Array\":return o.default.createElement(s.default,g);case\"Iterable\":case\"Map\":case\"Set\":return o.default.createElement(c.default,g);case\"String\":return o.default.createElement(f.default,(0,r.default)({},v,{valueGetter:function(e){return'\"'+e+'\"'}}));case\"Number\":return o.default.createElement(f.default,v);case\"Boolean\":return o.default.createElement(f.default,(0,r.default)({},v,{valueGetter:function(e){return e?\"true\":\"false\"}}));case\"Date\":return o.default.createElement(f.default,(0,r.default)({},v,{valueGetter:function(e){return e.toISOString()}}));case\"Null\":return o.default.createElement(f.default,(0,r.default)({},v,{valueGetter:function(){return\"null\"}}));case\"Undefined\":return o.default.createElement(f.default,(0,r.default)({},v,{valueGetter:function(){return\"undefined\"}}));case\"Function\":case\"Symbol\":return o.default.createElement(f.default,(0,r.default)({},v,{valueGetter:function(e){return e.toString()}}));case\"Custom\":return o.default.createElement(f.default,v);default:return o.default.createElement(f.default,(0,r.default)({},v,{valueGetter:function(e){return\"<\"+y+\">\"}}))}};p.propTypes={getItemString:i.default.func.isRequired,keyPath:i.default.arrayOf(i.default.oneOfType([i.default.string,i.default.number])).isRequired,labelRenderer:i.default.func.isRequired,styling:i.default.func.isRequired,value:i.default.any,valueRenderer:i.default.func.isRequired,isCustomNode:i.default.func.isRequired},t.default=p},function(e,t,n){e.exports={default:n(152),__esModule:!0}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=i(n(3)),a=i(n(0)),o=i(n(6));function i(e){return e&&e.__esModule?e:{default:e}}var u=function(e){var t=e.styling,n=e.arrowStyle,o=e.expanded,i=e.nodeType,u=e.onClick;return a.default.createElement(\"div\",(0,r.default)({},t(\"arrowContainer\",n),{onClick:u}),a.default.createElement(\"div\",t([\"arrow\",\"arrowSign\"],i,o,n),\"\\u25b6\",\"double\"===n&&a.default.createElement(\"div\",t([\"arrowSign\",\"arrowSignInner\"]),\"\\u25b6\")))};u.propTypes={styling:o.default.func.isRequired,arrowStyle:o.default.oneOf([\"single\",\"double\"]),expanded:o.default.bool.isRequired,nodeType:o.default.string.isRequired,onClick:o.default.func.isRequired},u.defaultProps={arrowStyle:\"single\"},t.default=u},function(e,t,n){var r=n(38),a=n(4)(\"toStringTag\"),o=\"Arguments\"==r(function(){return arguments}());e.exports=function(e){var t,n,i;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),a))?n:o?r(t):\"Object\"==(i=r(t))&&\"function\"==typeof t.callee?\"Arguments\":i}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getBase16Theme=t.createStyling=t.invertTheme=void 0;var r=p(n(32)),a=p(n(3)),o=p(n(167)),i=p(n(24)),u=p(n(171)),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(172)),s=p(n(210)),c=p(n(211)),f=p(n(216)),d=n(217);function p(e){return e&&e.__esModule?e:{default:e}}var b=l.default,h=(0,i.default)(b),m=(0,f.default)(c.default,d.rgb2yuv,(function(e){var t,n=(0,o.default)(e,3),r=n[0],a=n[1],i=n[2];return[(t=r,t<.25?1:t<.5?.9-t:1.1-t),a,i]}),d.yuv2rgb,s.default),y=function(e){return function(t){return{className:[t.className,e.className].filter(Boolean).join(\" \"),style:(0,a.default)({},t.style||{},e.style||{})}}},v=function(e,t){var n=(0,i.default)(t);for(var o in e)-1===n.indexOf(o)&&n.push(o);return n.reduce((function(n,o){return n[o]=function(e,t){if(void 0===e)return t;if(void 0===t)return e;var n=\"undefined\"===typeof e?\"undefined\":(0,r.default)(e),o=\"undefined\"===typeof t?\"undefined\":(0,r.default)(t);switch(n){case\"string\":switch(o){case\"string\":return[t,e].filter(Boolean).join(\" \");case\"object\":return y({className:e,style:t});case\"function\":return function(n){for(var r=arguments.length,a=Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];return y({className:e})(t.apply(void 0,[n].concat(a)))}}case\"object\":switch(o){case\"string\":return y({className:t,style:e});case\"object\":return(0,a.default)({},t,e);case\"function\":return function(n){for(var r=arguments.length,a=Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];return y({style:e})(t.apply(void 0,[n].concat(a)))}}case\"function\":switch(o){case\"string\":return function(n){for(var r=arguments.length,a=Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];return e.apply(void 0,[y(n)({className:t})].concat(a))};case\"object\":return function(n){for(var r=arguments.length,a=Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];return e.apply(void 0,[y(n)({style:t})].concat(a))};case\"function\":return function(n){for(var r=arguments.length,a=Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];return e.apply(void 0,[t.apply(void 0,[n].concat(a))].concat(a))}}}}(e[o],t[o]),n}),{})},g=function(e,t){for(var n=arguments.length,o=Array(n>2?n-2:0),u=2;u<n;u++)o[u-2]=arguments[u];if(null===t)return e;Array.isArray(t)||(t=[t]);var l=t.map((function(t){return e[t]})).filter(Boolean),s=l.reduce((function(e,t){return\"string\"===typeof t?e.className=[e.className,t].filter(Boolean).join(\" \"):\"object\"===(\"undefined\"===typeof t?\"undefined\":(0,r.default)(t))?e.style=(0,a.default)({},e.style,t):\"function\"===typeof t&&(e=(0,a.default)({},e,t.apply(void 0,[e].concat(o)))),e}),{className:\"\",style:{}});return s.className||delete s.className,0===(0,i.default)(s.style).length&&delete s.style,s},w=t.invertTheme=function(e){return(0,i.default)(e).reduce((function(t,n){return t[n]=/^base/.test(n)?m(e[n]):\"scheme\"===n?e[n]+\":inverted\":e[n],t}),{})},x=(t.createStyling=(0,u.default)((function(e){for(var t=arguments.length,n=Array(t>3?t-3:0),r=3;r<t;r++)n[r-3]=arguments[r];var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=o.defaultBase16,c=void 0===s?b:s,f=o.base16Themes,d=void 0===f?null:f,p=x(l,d);p&&(l=(0,a.default)({},p,l));var m=h.reduce((function(e,t){return e[t]=l[t]||c[t],e}),{}),y=(0,i.default)(l).reduce((function(e,t){return-1===h.indexOf(t)?(e[t]=l[t],e):e}),{}),w=e(m),k=v(y,w);return(0,u.default)(g,2).apply(void 0,[k].concat(n))}),3),t.getBase16Theme=function(e,t){if(e&&e.extend&&(e=e.extend),\"string\"===typeof e){var n=e.split(\":\"),r=(0,o.default)(n,2),a=r[0],i=r[1];e=(t||{})[a]||l[a],\"inverted\"===i&&(e=w(e))}return e&&e.hasOwnProperty(\"base00\")?e:void 0})},function(e,t){var n;n=function(){return this}();try{n=n||new Function(\"return this\")()}catch(r){\"object\"===typeof window&&(n=window)}e.exports=n},function(e,t){var n=/-?\\d+(\\.\\d+)?%?/g;e.exports=function(e){return e.match(n)}},function(e,t,n){\"use strict\";!function e(){if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}}(),e.exports=n(88)},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,\"a\",(function(){return r}))},function(e,t,n){e.exports=n(92)},function(e,t,n){var r;!function(){\"use strict\";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if(\"string\"===o||\"number\"===o)e.push(r);else if(Array.isArray(r)&&r.length){var i=a.apply(null,r);i&&e.push(i)}else if(\"object\"===o)for(var u in r)n.call(r,u)&&r[u]&&e.push(u)}}return e.join(\" \")}e.exports?(a.default=a,e.exports=a):void 0===(r=function(){return a}.apply(t,[]))||(e.exports=r)}()},function(e,t,n){\"use strict\";function r(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}n.d(t,\"a\",(function(){return r}))},,function(e,t,n){\"use strict\";var r=n(53),a=\"function\"===typeof Symbol&&Symbol.for,o=a?Symbol.for(\"react.element\"):60103,i=a?Symbol.for(\"react.portal\"):60106,u=a?Symbol.for(\"react.fragment\"):60107,l=a?Symbol.for(\"react.strict_mode\"):60108,s=a?Symbol.for(\"react.profiler\"):60114,c=a?Symbol.for(\"react.provider\"):60109,f=a?Symbol.for(\"react.context\"):60110,d=a?Symbol.for(\"react.forward_ref\"):60112,p=a?Symbol.for(\"react.suspense\"):60113,b=a?Symbol.for(\"react.suspense_list\"):60120,h=a?Symbol.for(\"react.memo\"):60115,m=a?Symbol.for(\"react.lazy\"):60116;a&&Symbol.for(\"react.fundamental\"),a&&Symbol.for(\"react.responder\"),a&&Symbol.for(\"react.scope\");var y=\"function\"===typeof Symbol&&Symbol.iterator;function v(e){for(var t=e.message,n=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+t,r=1;r<arguments.length;r++)n+=\"&args[]=\"+encodeURIComponent(arguments[r]);return e.message=\"Minified React error #\"+t+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings. \",e}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w={};function x(e,t,n){this.props=e,this.context=t,this.refs=w,this.updater=n||g}function k(){}function E(e,t,n){this.props=e,this.context=t,this.refs=w,this.updater=n||g}x.prototype.isReactComponent={},x.prototype.setState=function(e,t){if(\"object\"!==typeof e&&\"function\"!==typeof e&&null!=e)throw v(Error(85));this.updater.enqueueSetState(this,e,t,\"setState\")},x.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},k.prototype=x.prototype;var _=E.prototype=new k;_.constructor=E,r(_,x.prototype),_.isPureReactComponent=!0;var T={current:null},S={suspense:null},C={current:null},O=Object.prototype.hasOwnProperty,P={key:!0,ref:!0,__self:!0,__source:!0};function N(e,t,n){var r,a={},i=null,u=null;if(null!=t)for(r in void 0!==t.ref&&(u=t.ref),void 0!==t.key&&(i=\"\"+t.key),t)O.call(t,r)&&!P.hasOwnProperty(r)&&(a[r]=t[r]);var l=arguments.length-2;if(1===l)a.children=n;else if(1<l){for(var s=Array(l),c=0;c<l;c++)s[c]=arguments[c+2];a.children=s}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===a[r]&&(a[r]=l[r]);return{$$typeof:o,type:e,key:i,ref:u,props:a,_owner:C.current}}function R(e){return\"object\"===typeof e&&null!==e&&e.$$typeof===o}var M=/\\/+/g,A=[];function j(e,t,n,r){if(A.length){var a=A.pop();return a.result=e,a.keyPrefix=t,a.func=n,a.context=r,a.count=0,a}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function F(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>A.length&&A.push(e)}function L(e,t,n){return null==e?0:function e(t,n,r,a){var u=typeof t;\"undefined\"!==u&&\"boolean\"!==u||(t=null);var l=!1;if(null===t)l=!0;else switch(u){case\"string\":case\"number\":l=!0;break;case\"object\":switch(t.$$typeof){case o:case i:l=!0}}if(l)return r(a,t,\"\"===n?\".\"+D(t,0):n),1;if(l=0,n=\"\"===n?\".\":n+\":\",Array.isArray(t))for(var s=0;s<t.length;s++){var c=n+D(u=t[s],s);l+=e(u,c,r,a)}else if(null===t||\"object\"!==typeof t?c=null:c=\"function\"===typeof(c=y&&t[y]||t[\"@@iterator\"])?c:null,\"function\"===typeof c)for(t=c.call(t),s=0;!(u=t.next()).done;)l+=e(u=u.value,c=n+D(u,s++),r,a);else if(\"object\"===u)throw r=\"\"+t,v(Error(31),\"[object Object]\"===r?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":r,\"\");return l}(e,\"\",t,n)}function D(e,t){return\"object\"===typeof e&&null!==e&&null!=e.key?function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+e).replace(/[=:]/g,(function(e){return t[e]}))}(e.key):t.toString(36)}function I(e,t){e.func.call(e.context,t,e.count++)}function z(e,t,n){var r=e.result,a=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?U(e,r,n,(function(e){return e})):null!=e&&(R(e)&&(e=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,a+(!e.key||t&&t.key===e.key?\"\":(\"\"+e.key).replace(M,\"$&/\")+\"/\")+n)),r.push(e))}function U(e,t,n,r,a){var o=\"\";null!=n&&(o=(\"\"+n).replace(M,\"$&/\")+\"/\"),L(e,z,t=j(t,o,r,a)),F(t)}function B(){var e=T.current;if(null===e)throw v(Error(321));return e}var V={Children:{map:function(e,t,n){if(null==e)return e;var r=[];return U(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;L(e,I,t=j(null,null,t,n)),F(t)},count:function(e){return L(e,(function(){return null}),null)},toArray:function(e){var t=[];return U(e,t,null,(function(e){return e})),t},only:function(e){if(!R(e))throw v(Error(143));return e}},createRef:function(){return{current:null}},Component:x,PureComponent:E,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:f,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:c,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:d,render:e}},lazy:function(e){return{$$typeof:m,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:h,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return B().useCallback(e,t)},useContext:function(e,t){return B().useContext(e,t)},useEffect:function(e,t){return B().useEffect(e,t)},useImperativeHandle:function(e,t,n){return B().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return B().useLayoutEffect(e,t)},useMemo:function(e,t){return B().useMemo(e,t)},useReducer:function(e,t,n){return B().useReducer(e,t,n)},useRef:function(e){return B().useRef(e)},useState:function(e){return B().useState(e)},Fragment:u,Profiler:s,StrictMode:l,Suspense:p,unstable_SuspenseList:b,createElement:N,cloneElement:function(e,t,n){if(null===e||void 0===e)throw v(Error(267),e);var a=r({},e.props),i=e.key,u=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(u=t.ref,l=C.current),void 0!==t.key&&(i=\"\"+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(c in t)O.call(t,c)&&!P.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==s?s[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){s=Array(c);for(var f=0;f<c;f++)s[f]=arguments[f+2];a.children=s}return{$$typeof:o,type:e.type,key:i,ref:u,props:a,_owner:l}},createFactory:function(e){var t=N.bind(null,e);return t.type=e,t},isValidElement:R,version:\"16.10.2\",unstable_withSuspenseConfig:function(e,t){var n=S.suspense;S.suspense=void 0===t?null:t;try{e()}finally{S.suspense=n}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:T,ReactCurrentBatchConfig:S,ReactCurrentOwner:C,IsSomeRendererActing:{current:!1},assign:r}},W={default:V},q=W&&V||W;e.exports=q.default||q},function(e,t,n){\"use strict\";var r=n(0),a=n(53),o=n(89);function i(e){for(var t=e.message,n=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+t,r=1;r<arguments.length;r++)n+=\"&args[]=\"+encodeURIComponent(arguments[r]);return e.message=\"Minified React error #\"+t+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings. \",e}if(!r)throw i(Error(227));var u=null,l={};function s(){if(u)for(var e in l){var t=l[e],n=u.indexOf(e);if(!(-1<n))throw i(Error(96),e);if(!f[n]){if(!t.extractEvents)throw i(Error(97),e);for(var r in f[n]=t,n=t.eventTypes){var a=void 0,o=n[r],s=t,p=r;if(d.hasOwnProperty(p))throw i(Error(99),p);d[p]=o;var b=o.phasedRegistrationNames;if(b){for(a in b)b.hasOwnProperty(a)&&c(b[a],s,p);a=!0}else o.registrationName?(c(o.registrationName,s,p),a=!0):a=!1;if(!a)throw i(Error(98),r,e)}}}}function c(e,t,n){if(p[e])throw i(Error(100),e);p[e]=t,b[e]=t.eventTypes[n].dependencies}var f=[],d={},p={},b={};function h(e,t,n,r,a,o,i,u,l){var s=Array.prototype.slice.call(arguments,3);try{t.apply(n,s)}catch(c){this.onError(c)}}var m=!1,y=null,v=!1,g=null,w={onError:function(e){m=!0,y=e}};function x(e,t,n,r,a,o,i,u,l){m=!1,y=null,h.apply(w,arguments)}var k=null,E=null,_=null;function T(e,t,n){var r=e.type||\"unknown-event\";e.currentTarget=_(n),function(e,t,n,r,a,o,u,l,s){if(x.apply(this,arguments),m){if(!m)throw i(Error(198));var c=y;m=!1,y=null,v||(v=!0,g=c)}}(r,t,void 0,e),e.currentTarget=null}function S(e,t){if(null==t)throw i(Error(30));return null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function C(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}var O=null;function P(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t))for(var r=0;r<t.length&&!e.isPropagationStopped();r++)T(e,t[r],n[r]);else t&&T(e,t,n);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function N(e){if(null!==e&&(O=S(O,e)),e=O,O=null,e){if(C(e,P),O)throw i(Error(95));if(v)throw e=g,v=!1,g=null,e}}var R={injectEventPluginOrder:function(e){if(u)throw i(Error(101));u=Array.prototype.slice.call(e),s()},injectEventPluginsByName:function(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var r=e[t];if(!l.hasOwnProperty(t)||l[t]!==r){if(l[t])throw i(Error(102),t);l[t]=r,n=!0}}n&&s()}};function M(e,t){var n=e.stateNode;if(!n)return null;var r=k(n);if(!r)return null;n=r[t];e:switch(t){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":(r=!r.disabled)||(r=!(\"button\"===(e=e.type)||\"input\"===e||\"select\"===e||\"textarea\"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&\"function\"!==typeof n)throw i(Error(231),t,typeof n);return n}var A=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;A.hasOwnProperty(\"ReactCurrentDispatcher\")||(A.ReactCurrentDispatcher={current:null}),A.hasOwnProperty(\"ReactCurrentBatchConfig\")||(A.ReactCurrentBatchConfig={suspense:null});var j=/^(.*)[\\\\\\/]/,F=\"function\"===typeof Symbol&&Symbol.for,L=F?Symbol.for(\"react.element\"):60103,D=F?Symbol.for(\"react.portal\"):60106,I=F?Symbol.for(\"react.fragment\"):60107,z=F?Symbol.for(\"react.strict_mode\"):60108,U=F?Symbol.for(\"react.profiler\"):60114,B=F?Symbol.for(\"react.provider\"):60109,V=F?Symbol.for(\"react.context\"):60110,W=F?Symbol.for(\"react.concurrent_mode\"):60111,q=F?Symbol.for(\"react.forward_ref\"):60112,H=F?Symbol.for(\"react.suspense\"):60113,$=F?Symbol.for(\"react.suspense_list\"):60120,K=F?Symbol.for(\"react.memo\"):60115,Q=F?Symbol.for(\"react.lazy\"):60116;F&&Symbol.for(\"react.fundamental\"),F&&Symbol.for(\"react.responder\"),F&&Symbol.for(\"react.scope\");var G=\"function\"===typeof Symbol&&Symbol.iterator;function Y(e){return null===e||\"object\"!==typeof e?null:\"function\"===typeof(e=G&&e[G]||e[\"@@iterator\"])?e:null}function X(e){if(null==e)return null;if(\"function\"===typeof e)return e.displayName||e.name||null;if(\"string\"===typeof e)return e;switch(e){case I:return\"Fragment\";case D:return\"Portal\";case U:return\"Profiler\";case z:return\"StrictMode\";case H:return\"Suspense\";case $:return\"SuspenseList\"}if(\"object\"===typeof e)switch(e.$$typeof){case V:return\"Context.Consumer\";case B:return\"Context.Provider\";case q:var t=e.render;return t=t.displayName||t.name||\"\",e.displayName||(\"\"!==t?\"ForwardRef(\"+t+\")\":\"ForwardRef\");case K:return X(e.type);case Q:if(e=1===e._status?e._result:null)return X(e)}return null}function J(e){var t=\"\";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n=\"\";break e;default:var r=e._debugOwner,a=e._debugSource,o=X(e.type);n=null,r&&(n=X(r.type)),r=o,o=\"\",a?o=\" (at \"+a.fileName.replace(j,\"\")+\":\"+a.lineNumber+\")\":n&&(o=\" (created by \"+n+\")\"),n=\"\\n    in \"+(r||\"Unknown\")+o}t+=n,e=e.return}while(e);return t}var Z=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ee=null,te=null,ne=null;function re(e){if(e=E(e)){if(\"function\"!==typeof ee)throw i(Error(280));var t=k(e.stateNode);ee(e.stateNode,e.type,t)}}function ae(e){te?ne?ne.push(e):ne=[e]:te=e}function oe(){if(te){var e=te,t=ne;if(ne=te=null,re(e),t)for(e=0;e<t.length;e++)re(t[e])}}function ie(e,t){return e(t)}function ue(e,t,n,r){return e(t,n,r)}function le(){}var se=ie,ce=!1,fe=!1;function de(){null===te&&null===ne||(le(),oe())}new Map,new Map,new Map;var pe=/^[: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][: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\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,be=Object.prototype.hasOwnProperty,he={},me={};function ye(e,t,n,r,a,o){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o}var ve={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach((function(e){ve[e]=new ye(e,0,!1,e,null,!1)})),[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach((function(e){var t=e[0];ve[t]=new ye(t,1,!1,e[1],null,!1)})),[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach((function(e){ve[e]=new ye(e,2,!1,e.toLowerCase(),null,!1)})),[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach((function(e){ve[e]=new ye(e,2,!1,e,null,!1)})),\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach((function(e){ve[e]=new ye(e,3,!1,e.toLowerCase(),null,!1)})),[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach((function(e){ve[e]=new ye(e,3,!0,e,null,!1)})),[\"capture\",\"download\"].forEach((function(e){ve[e]=new ye(e,4,!1,e,null,!1)})),[\"cols\",\"rows\",\"size\",\"span\"].forEach((function(e){ve[e]=new ye(e,6,!1,e,null,!1)})),[\"rowSpan\",\"start\"].forEach((function(e){ve[e]=new ye(e,5,!1,e.toLowerCase(),null,!1)}));var ge=/[\\-:]([a-z])/g;function we(e){return e[1].toUpperCase()}function xe(e){switch(typeof e){case\"boolean\":case\"number\":case\"object\":case\"string\":case\"undefined\":return e;default:return\"\"}}function ke(e,t,n,r){var a=ve.hasOwnProperty(t)?ve[t]:null;(null!==a?0===a.type:!r&&(2<t.length&&(\"o\"===t[0]||\"O\"===t[0])&&(\"n\"===t[1]||\"N\"===t[1])))||(function(e,t,n,r){if(null===t||\"undefined\"===typeof t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case\"function\":case\"symbol\":return!0;case\"boolean\":return!r&&(null!==n?!n.acceptsBooleans:\"data-\"!==(e=e.toLowerCase().slice(0,5))&&\"aria-\"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!be.call(me,e)||!be.call(he,e)&&(pe.test(e)?me[e]=!0:(he[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,\"\"+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&\"\":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?\"\":\"\"+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}function Ee(e){var t=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===t||\"radio\"===t)}function _e(e){e._valueTracker||(e._valueTracker=function(e){var t=Ee(e)?\"checked\":\"value\",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=\"\"+e[t];if(!e.hasOwnProperty(t)&&\"undefined\"!==typeof n&&\"function\"===typeof n.get&&\"function\"===typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=\"\"+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Te(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=\"\";return e&&(r=Ee(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Se(e,t){var n=t.checked;return a({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Ce(e,t){var n=null==t.defaultValue?\"\":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=xe(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:\"checkbox\"===t.type||\"radio\"===t.type?null!=t.checked:null!=t.value}}function Oe(e,t){null!=(t=t.checked)&&ke(e,\"checked\",t,!1)}function Pe(e,t){Oe(e,t);var n=xe(t.value),r=t.type;if(null!=n)\"number\"===r?(0===n&&\"\"===e.value||e.value!=n)&&(e.value=\"\"+n):e.value!==\"\"+n&&(e.value=\"\"+n);else if(\"submit\"===r||\"reset\"===r)return void e.removeAttribute(\"value\");t.hasOwnProperty(\"value\")?Re(e,t.type,n):t.hasOwnProperty(\"defaultValue\")&&Re(e,t.type,xe(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function Ne(e,t,n){if(t.hasOwnProperty(\"value\")||t.hasOwnProperty(\"defaultValue\")){var r=t.type;if(!(\"submit\"!==r&&\"reset\"!==r||void 0!==t.value&&null!==t.value))return;t=\"\"+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}\"\"!==(n=e.name)&&(e.name=\"\"),e.defaultChecked=!e.defaultChecked,e.defaultChecked=!!e._wrapperState.initialChecked,\"\"!==n&&(e.name=n)}function Re(e,t,n){\"number\"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+n&&(e.defaultValue=\"\"+n))}function Me(e,t){return e=a({children:void 0},t),(t=function(e){var t=\"\";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function Ae(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t[\"$\"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty(\"$\"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=\"\"+xe(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function je(e,t){if(null!=t.dangerouslySetInnerHTML)throw i(Error(91));return a({},t,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue})}function Fe(e,t){var n=t.value;if(null==n){if(n=t.defaultValue,null!=(t=t.children)){if(null!=n)throw i(Error(92));if(Array.isArray(t)){if(!(1>=t.length))throw i(Error(93));t=t[0]}n=t}null==n&&(n=\"\")}e._wrapperState={initialValue:xe(n)}}function Le(e,t){var n=xe(t.value),r=xe(t.defaultValue);null!=n&&((n=\"\"+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=\"\"+r)}function De(e){var t=e.textContent;t===e._wrapperState.initialValue&&\"\"!==t&&null!==t&&(e.value=t)}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach((function(e){var t=e.replace(ge,we);ve[t]=new ye(t,1,!1,e,null,!1)})),\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach((function(e){var t=e.replace(ge,we);ve[t]=new ye(t,1,!1,e,\"http://www.w3.org/1999/xlink\",!1)})),[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach((function(e){var t=e.replace(ge,we);ve[t]=new ye(t,1,!1,e,\"http://www.w3.org/XML/1998/namespace\",!1)})),[\"tabIndex\",\"crossOrigin\"].forEach((function(e){ve[e]=new ye(e,1,!1,e.toLowerCase(),null,!1)})),ve.xlinkHref=new ye(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0),[\"src\",\"href\",\"action\",\"formAction\"].forEach((function(e){ve[e]=new ye(e,1,!1,e.toLowerCase(),null,!0)}));var Ie={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};function ze(e){switch(e){case\"svg\":return\"http://www.w3.org/2000/svg\";case\"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ue(e,t){return null==e||\"http://www.w3.org/1999/xhtml\"===e?ze(t):\"http://www.w3.org/2000/svg\"===e&&\"foreignObject\"===t?\"http://www.w3.org/1999/xhtml\":e}var Be,Ve=function(e){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,a){MSApp.execUnsafeLocalFunction((function(){return e(t,n)}))}:e}((function(e,t){if(e.namespaceURI!==Ie.svg||\"innerHTML\"in e)e.innerHTML=t;else{for((Be=Be||document.createElement(\"div\")).innerHTML=\"<svg>\"+t.valueOf().toString()+\"</svg>\",t=Be.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}}));function We(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function qe(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[\"Webkit\"+e]=\"webkit\"+t,n[\"Moz\"+e]=\"moz\"+t,n}var He={animationend:qe(\"Animation\",\"AnimationEnd\"),animationiteration:qe(\"Animation\",\"AnimationIteration\"),animationstart:qe(\"Animation\",\"AnimationStart\"),transitionend:qe(\"Transition\",\"TransitionEnd\")},$e={},Ke={};function Qe(e){if($e[e])return $e[e];if(!He[e])return e;var t,n=He[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ke)return $e[e]=n[t];return e}Z&&(Ke=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete He.animationend.animation,delete He.animationiteration.animation,delete He.animationstart.animation),\"TransitionEvent\"in window||delete He.transitionend.transition);var Ge=Qe(\"animationend\"),Ye=Qe(\"animationiteration\"),Xe=Qe(\"animationstart\"),Je=Qe(\"transitionend\"),Ze=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),et=!1,tt=[],nt=null,rt=null,at=null,ot=new Map,it=new Map,ut=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),lt=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");function st(e,t,n,r){return{blockedOn:e,topLevelType:t,eventSystemFlags:32|n,nativeEvent:r}}function ct(e,t){switch(e){case\"focus\":case\"blur\":nt=null;break;case\"dragenter\":case\"dragleave\":rt=null;break;case\"mouseover\":case\"mouseout\":at=null;break;case\"pointerover\":case\"pointerout\":ot.delete(t.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":it.delete(t.pointerId)}}function ft(e,t,n,r,a){return null===e||e.nativeEvent!==a?st(t,n,r,a):(e.eventSystemFlags|=r,e)}function dt(e){if(null!==e.blockedOn)return!1;var t=Sn(e.topLevelType,e.eventSystemFlags,e.nativeEvent);return null===t||(e.blockedOn=t,!1)}function pt(e,t,n){dt(e)&&n.delete(t)}function bt(){for(et=!1;0<tt.length;){var e=tt[0];if(null!==e.blockedOn)break;var t=Sn(e.topLevelType,e.eventSystemFlags,e.nativeEvent);null!==t?e.blockedOn=t:tt.shift()}null!==nt&&dt(nt)&&(nt=null),null!==rt&&dt(rt)&&(rt=null),null!==at&&dt(at)&&(at=null),ot.forEach(pt),it.forEach(pt)}function ht(e,t){e.blockedOn===t&&(e.blockedOn=null,et||(et=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,bt)))}function mt(e){function t(t){return ht(t,e)}if(0<tt.length){ht(tt[0],e);for(var n=1;n<tt.length;n++){var r=tt[n];r.blockedOn===e&&(r.blockedOn=null)}}null!==nt&&ht(nt,e),null!==rt&&ht(rt,e),null!==at&&ht(at,e),ot.forEach(t),it.forEach(t)}var yt=0,vt=2,gt=1024;function wt(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{((t=e).effectTag&(vt|gt))!==yt&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function xt(e){if(wt(e)!==e)throw i(Error(188))}function kt(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=wt(e)))throw i(Error(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var o=a.alternate;if(null===o){if(null!==(r=a.return)){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return xt(a),e;if(o===r)return xt(a),t;o=o.sibling}throw i(Error(188))}if(n.return!==r.return)n=a,r=o;else{for(var u=!1,l=a.child;l;){if(l===n){u=!0,n=a,r=o;break}if(l===r){u=!0,r=a,n=o;break}l=l.sibling}if(!u){for(l=o.child;l;){if(l===n){u=!0,n=o,r=a;break}if(l===r){u=!0,r=o,n=a;break}l=l.sibling}if(!u)throw i(Error(189))}}if(n.alternate!==r)throw i(Error(190))}if(3!==n.tag)throw i(Error(188));return n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Et(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function _t(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function Tt(e,t,n){(t=M(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=S(n._dispatchListeners,t),n._dispatchInstances=S(n._dispatchInstances,e))}function St(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=e._targetInst,n=[];t;)n.push(t),t=_t(t);for(t=n.length;0<t--;)Tt(n[t],\"captured\",e);for(t=0;t<n.length;t++)Tt(n[t],\"bubbled\",e)}}function Ct(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=M(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=S(n._dispatchListeners,t),n._dispatchInstances=S(n._dispatchInstances,e))}function Ot(e){e&&e.dispatchConfig.registrationName&&Ct(e._targetInst,null,e)}function Pt(e){C(e,St)}function Nt(){return!0}function Rt(){return!1}function Mt(e,t,n,r){for(var a in this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface)e.hasOwnProperty(a)&&((t=e[a])?this[a]=t(n):\"target\"===a?this.target=r:this[a]=n[a]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?Nt:Rt,this.isPropagationStopped=Rt,this}function At(e,t,n,r){if(this.eventPool.length){var a=this.eventPool.pop();return this.call(a,e,t,n,r),a}return new this(e,t,n,r)}function jt(e){if(!(e instanceof this))throw i(Error(279));e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function Ft(e){e.eventPool=[],e.getPooled=At,e.release=jt}a(Mt.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Nt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Nt)},persist:function(){this.isPersistent=Nt},isPersistent:Rt,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=Rt,this._dispatchInstances=this._dispatchListeners=null}}),Mt.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},Mt.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var o=new t;return a(o,n.prototype),n.prototype=o,n.prototype.constructor=n,n.Interface=a({},r.Interface,e),n.extend=r.extend,Ft(n),n},Ft(Mt);var Lt=Mt.extend({animationName:null,elapsedTime:null,pseudoElement:null}),Dt=Mt.extend({clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}}),It=Mt.extend({view:null,detail:null}),zt=It.extend({relatedTarget:null});function Ut(e){var t=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}var Bt={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Vt={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Wt={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function qt(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Wt[e])&&!!t[e]}function Ht(){return qt}for(var $t=It.extend({key:function(e){if(e.key){var t=Bt[e.key]||e.key;if(\"Unidentified\"!==t)return t}return\"keypress\"===e.type?13===(e=Ut(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?Vt[e.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Ht,charCode:function(e){return\"keypress\"===e.type?Ut(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?Ut(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}}),Kt=0,Qt=0,Gt=!1,Yt=!1,Xt=It.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Ht,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if(\"movementX\"in e)return e.movementX;var t=Kt;return Kt=e.screenX,Gt?\"mousemove\"===e.type?e.screenX-t:0:(Gt=!0,0)},movementY:function(e){if(\"movementY\"in e)return e.movementY;var t=Qt;return Qt=e.screenY,Yt?\"mousemove\"===e.type?e.screenY-t:0:(Yt=!0,0)}}),Jt=Xt.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Zt=Xt.extend({dataTransfer:null}),en=It.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Ht}),tn=Mt.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),nn=Xt.extend({deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),rn=[[\"blur\",\"blur\",0],[\"cancel\",\"cancel\",0],[\"click\",\"click\",0],[\"close\",\"close\",0],[\"contextmenu\",\"contextMenu\",0],[\"copy\",\"copy\",0],[\"cut\",\"cut\",0],[\"auxclick\",\"auxClick\",0],[\"dblclick\",\"doubleClick\",0],[\"dragend\",\"dragEnd\",0],[\"dragstart\",\"dragStart\",0],[\"drop\",\"drop\",0],[\"focus\",\"focus\",0],[\"input\",\"input\",0],[\"invalid\",\"invalid\",0],[\"keydown\",\"keyDown\",0],[\"keypress\",\"keyPress\",0],[\"keyup\",\"keyUp\",0],[\"mousedown\",\"mouseDown\",0],[\"mouseup\",\"mouseUp\",0],[\"paste\",\"paste\",0],[\"pause\",\"pause\",0],[\"play\",\"play\",0],[\"pointercancel\",\"pointerCancel\",0],[\"pointerdown\",\"pointerDown\",0],[\"pointerup\",\"pointerUp\",0],[\"ratechange\",\"rateChange\",0],[\"reset\",\"reset\",0],[\"seeked\",\"seeked\",0],[\"submit\",\"submit\",0],[\"touchcancel\",\"touchCancel\",0],[\"touchend\",\"touchEnd\",0],[\"touchstart\",\"touchStart\",0],[\"volumechange\",\"volumeChange\",0],[\"drag\",\"drag\",1],[\"dragenter\",\"dragEnter\",1],[\"dragexit\",\"dragExit\",1],[\"dragleave\",\"dragLeave\",1],[\"dragover\",\"dragOver\",1],[\"mousemove\",\"mouseMove\",1],[\"mouseout\",\"mouseOut\",1],[\"mouseover\",\"mouseOver\",1],[\"pointermove\",\"pointerMove\",1],[\"pointerout\",\"pointerOut\",1],[\"pointerover\",\"pointerOver\",1],[\"scroll\",\"scroll\",1],[\"toggle\",\"toggle\",1],[\"touchmove\",\"touchMove\",1],[\"wheel\",\"wheel\",1],[\"abort\",\"abort\",2],[Ge,\"animationEnd\",2],[Ye,\"animationIteration\",2],[Xe,\"animationStart\",2],[\"canplay\",\"canPlay\",2],[\"canplaythrough\",\"canPlayThrough\",2],[\"durationchange\",\"durationChange\",2],[\"emptied\",\"emptied\",2],[\"encrypted\",\"encrypted\",2],[\"ended\",\"ended\",2],[\"error\",\"error\",2],[\"gotpointercapture\",\"gotPointerCapture\",2],[\"load\",\"load\",2],[\"loadeddata\",\"loadedData\",2],[\"loadedmetadata\",\"loadedMetadata\",2],[\"loadstart\",\"loadStart\",2],[\"lostpointercapture\",\"lostPointerCapture\",2],[\"playing\",\"playing\",2],[\"progress\",\"progress\",2],[\"seeking\",\"seeking\",2],[\"stalled\",\"stalled\",2],[\"suspend\",\"suspend\",2],[\"timeupdate\",\"timeUpdate\",2],[Je,\"transitionEnd\",2],[\"waiting\",\"waiting\",2]],an={},on={},un=0;un<rn.length;un++){var ln=rn[un],sn=ln[0],cn=ln[1],fn=ln[2],dn=\"on\"+(cn[0].toUpperCase()+cn.slice(1)),pn={phasedRegistrationNames:{bubbled:dn,captured:dn+\"Capture\"},dependencies:[sn],eventPriority:fn};an[cn]=pn,on[sn]=pn}var bn={eventTypes:an,getEventPriority:function(e){return void 0!==(e=on[e])?e.eventPriority:2},extractEvents:function(e,t,n,r){var a=on[e];if(!a)return null;switch(e){case\"keypress\":if(0===Ut(n))return null;case\"keydown\":case\"keyup\":e=$t;break;case\"blur\":case\"focus\":e=zt;break;case\"click\":if(2===n.button)return null;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":e=Xt;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":e=Zt;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":e=en;break;case Ge:case Ye:case Xe:e=Lt;break;case Je:e=tn;break;case\"scroll\":e=It;break;case\"wheel\":e=nn;break;case\"copy\":case\"cut\":case\"paste\":e=Dt;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":e=Jt;break;default:e=Mt}return Pt(t=e.getPooled(a,t,n,r)),t}},hn=bn.getEventPriority,mn=10,yn=[];function vn(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);break}var r=n;if(3===r.tag)r=r.stateNode.containerInfo;else{for(;r.return;)r=r.return;r=3!==r.tag?null:r.stateNode.containerInfo}if(!r)break;5!==(t=n.tag)&&6!==t||e.ancestors.push(n),n=ur(r)}while(n);for(n=0;n<e.ancestors.length;n++){t=e.ancestors[n];var a=Et(e.nativeEvent);r=e.topLevelType;for(var o=e.nativeEvent,i=e.eventSystemFlags,u=null,l=0;l<f.length;l++){var s=f[l];s&&(s=s.extractEvents(r,t,o,a,i))&&(u=S(u,s))}N(u)}}var gn=!0;function wn(e,t){xn(t,e,!1)}function xn(e,t,n){switch(hn(t)){case 0:var r=kn.bind(null,t,1);break;case 1:r=En.bind(null,t,1);break;default:r=Tn.bind(null,t,1)}n?e.addEventListener(t,r,!0):e.addEventListener(t,r,!1)}function kn(e,t,n){ce||le();var r=Tn,a=ce;ce=!0;try{ue(r,e,t,n)}finally{(ce=a)||de()}}function En(e,t,n){Tn(e,t,n)}function _n(e,t,n,r){if(yn.length){var a=yn.pop();a.topLevelType=e,a.eventSystemFlags=t,a.nativeEvent=n,a.targetInst=r,e=a}else e={topLevelType:e,eventSystemFlags:t,nativeEvent:n,targetInst:r,ancestors:[]};try{if(t=vn,n=e,fe)t(n,void 0);else{fe=!0;try{se(t,n,void 0)}finally{fe=!1,de()}}}finally{e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,yn.length<mn&&yn.push(e)}}function Tn(e,t,n){if(gn)if(0<tt.length&&-1<ut.indexOf(e))e=st(null,e,t,n),tt.push(e);else{var r=Sn(e,t,n);null===r?ct(e,n):-1<ut.indexOf(e)?(e=st(r,e,t,n),tt.push(e)):function(e,t,n,r){switch(t){case\"focus\":return nt=ft(nt,e,t,n,r),!0;case\"dragenter\":return rt=ft(rt,e,t,n,r),!0;case\"mouseover\":return at=ft(at,e,t,n,r),!0;case\"pointerover\":var a=r.pointerId;return ot.set(a,ft(ot.get(a)||null,e,t,n,r)),!0;case\"gotpointercapture\":return a=r.pointerId,it.set(a,ft(it.get(a)||null,e,t,n,r)),!0}return!1}(r,e,t,n)||(ct(e,n),_n(e,t,n,null))}}function Sn(e,t,n){var r=Et(n),a=ur(r);if(null!==a)if(null===(r=wt(a)))a=null;else{var o=r.tag;if(13===o){if(null!==(r=13!==r.tag||(null===(a=r.memoizedState)&&(null!==(r=r.alternate)&&(a=r.memoizedState)),null===a)?null:a.dehydrated))return r;a=null}else if(3===o){if(r.stateNode.hydrate)return 3===r.tag?r.stateNode.containerInfo:null;a=null}else r!==a&&(a=null)}return _n(e,t,n,a),null}function Cn(e){if(!Z)return!1;var t=(e=\"on\"+e)in document;return t||((t=document.createElement(\"div\")).setAttribute(e,\"return;\"),t=\"function\"===typeof t[e]),t}var On=new(\"function\"===typeof WeakMap?WeakMap:Map);function Pn(e){var t=On.get(e);return void 0===t&&(t=new Set,On.set(e,t)),t}function Nn(e,t,n){if(!n.has(e)){switch(e){case\"scroll\":xn(t,\"scroll\",!0);break;case\"focus\":case\"blur\":xn(t,\"focus\",!0),xn(t,\"blur\",!0),n.add(\"blur\"),n.add(\"focus\");break;case\"cancel\":case\"close\":Cn(e)&&xn(t,e,!0);break;case\"invalid\":case\"submit\":case\"reset\":break;default:-1===Ze.indexOf(e)&&wn(e,t)}n.add(e)}}var Rn={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Mn=[\"Webkit\",\"ms\",\"Moz\",\"O\"];function An(e,t,n){return null==t||\"boolean\"===typeof t||\"\"===t?\"\":n||\"number\"!==typeof t||0===t||Rn.hasOwnProperty(e)&&Rn[e]?(\"\"+t).trim():t+\"px\"}function jn(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf(\"--\"),a=An(n,t[n],r);\"float\"===n&&(n=\"cssFloat\"),r?e.setProperty(n,a):e[n]=a}}Object.keys(Rn).forEach((function(e){Mn.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Rn[t]=Rn[e]}))}));var Fn=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ln(e,t){if(t){if(Fn[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw i(Error(137),e,\"\");if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw i(Error(60));if(!(\"object\"===typeof t.dangerouslySetInnerHTML&&\"__html\"in t.dangerouslySetInnerHTML))throw i(Error(61))}if(null!=t.style&&\"object\"!==typeof t.style)throw i(Error(62),\"\")}}function Dn(e,t){if(-1===e.indexOf(\"-\"))return\"string\"===typeof t.is;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}function In(e,t){var n=Pn(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);t=b[t];for(var r=0;r<t.length;r++)Nn(t[r],e,n)}function zn(){}function Un(e){if(\"undefined\"===typeof(e=e||(\"undefined\"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Bn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Vn(e,t){var n,r=Bn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Bn(r)}}function Wn(){for(var e=window,t=Un();t instanceof e.HTMLIFrameElement;){try{var n=\"string\"===typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Un((e=t.contentWindow).document)}return t}function qn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(\"input\"===t&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===t||\"true\"===e.contentEditable)}var Hn=\"$\",$n=\"/$\",Kn=\"$?\",Qn=\"$!\",Gn=null,Yn=null;function Xn(e,t){switch(e){case\"button\":case\"input\":case\"select\":case\"textarea\":return!!t.autoFocus}return!1}function Jn(e,t){return\"textarea\"===e||\"option\"===e||\"noscript\"===e||\"string\"===typeof t.children||\"number\"===typeof t.children||\"object\"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Zn=\"function\"===typeof setTimeout?setTimeout:void 0,er=\"function\"===typeof clearTimeout?clearTimeout:void 0;function tr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function nr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if(n===Hn||n===Qn||n===Kn){if(0===t)return e;t--}else n===$n&&t++}e=e.previousSibling}return null}var rr=Math.random().toString(36).slice(2),ar=\"__reactInternalInstance$\"+rr,or=\"__reactEventHandlers$\"+rr,ir=\"__reactContainere$\"+rr;function ur(e){var t=e[ar];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ir]||n[ar]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=nr(e);null!==e;){if(n=e[ar])return n;e=nr(e)}return t}n=(e=n).parentNode}return null}function lr(e){return!(e=e[ar]||e[ir])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function sr(e){if(5===e.tag||6===e.tag)return e.stateNode;throw i(Error(33))}function cr(e){return e[or]||null}var fr=null,dr=null,pr=null;function br(){if(pr)return pr;var e,t,n=dr,r=n.length,a=\"value\"in fr?fr.value:fr.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return pr=a.slice(e,1<t?1-t:void 0)}var hr=Mt.extend({data:null}),mr=Mt.extend({data:null}),yr=[9,13,27,32],vr=Z&&\"CompositionEvent\"in window,gr=null;Z&&\"documentMode\"in document&&(gr=document.documentMode);var wr=Z&&\"TextEvent\"in window&&!gr,xr=Z&&(!vr||gr&&8<gr&&11>=gr),kr=String.fromCharCode(32),Er={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",captured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},_r=!1;function Tr(e,t){switch(e){case\"keyup\":return-1!==yr.indexOf(t.keyCode);case\"keydown\":return 229!==t.keyCode;case\"keypress\":case\"mousedown\":case\"blur\":return!0;default:return!1}}function Sr(e){return\"object\"===typeof(e=e.detail)&&\"data\"in e?e.data:null}var Cr=!1;var Or={eventTypes:Er,extractEvents:function(e,t,n,r){var a;if(vr)e:{switch(e){case\"compositionstart\":var o=Er.compositionStart;break e;case\"compositionend\":o=Er.compositionEnd;break e;case\"compositionupdate\":o=Er.compositionUpdate;break e}o=void 0}else Cr?Tr(e,n)&&(o=Er.compositionEnd):\"keydown\"===e&&229===n.keyCode&&(o=Er.compositionStart);return o?(xr&&\"ko\"!==n.locale&&(Cr||o!==Er.compositionStart?o===Er.compositionEnd&&Cr&&(a=br()):(dr=\"value\"in(fr=r)?fr.value:fr.textContent,Cr=!0)),o=hr.getPooled(o,t,n,r),a?o.data=a:null!==(a=Sr(n))&&(o.data=a),Pt(o),a=o):a=null,(e=wr?function(e,t){switch(e){case\"compositionend\":return Sr(t);case\"keypress\":return 32!==t.which?null:(_r=!0,kr);case\"textInput\":return(e=t.data)===kr&&_r?null:e;default:return null}}(e,n):function(e,t){if(Cr)return\"compositionend\"===e||!vr&&Tr(e,t)?(e=br(),pr=dr=fr=null,Cr=!1,e):null;switch(e){case\"paste\":return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\"compositionend\":return xr&&\"ko\"!==t.locale?null:t.data;default:return null}}(e,n))?((t=mr.getPooled(Er.beforeInput,t,n,r)).data=e,Pt(t)):t=null,null===a?t:null===t?a:[a,t]}},Pr={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Nr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===t?!!Pr[e.type]:\"textarea\"===t}var Rr={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function Mr(e,t,n){return(e=Mt.getPooled(Rr.change,e,t,n)).type=\"change\",ae(n),Pt(e),e}var Ar=null,jr=null;function Fr(e){N(e)}function Lr(e){if(Te(sr(e)))return e}function Dr(e,t){if(\"change\"===e)return t}var Ir=!1;function zr(){Ar&&(Ar.detachEvent(\"onpropertychange\",Ur),jr=Ar=null)}function Ur(e){if(\"value\"===e.propertyName&&Lr(jr))if(e=Mr(jr,e,Et(e)),ce)N(e);else{ce=!0;try{ie(Fr,e)}finally{ce=!1,de()}}}function Br(e,t,n){\"focus\"===e?(zr(),jr=n,(Ar=t).attachEvent(\"onpropertychange\",Ur)):\"blur\"===e&&zr()}function Vr(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return Lr(jr)}function Wr(e,t){if(\"click\"===e)return Lr(t)}function qr(e,t){if(\"input\"===e||\"change\"===e)return Lr(t)}Z&&(Ir=Cn(\"input\")&&(!document.documentMode||9<document.documentMode));var Hr={eventTypes:Rr,_isInputEventSupported:Ir,extractEvents:function(e,t,n,r){var a=t?sr(t):window,o=a.nodeName&&a.nodeName.toLowerCase();if(\"select\"===o||\"input\"===o&&\"file\"===a.type)var i=Dr;else if(Nr(a))if(Ir)i=qr;else{i=Vr;var u=Br}else(o=a.nodeName)&&\"input\"===o.toLowerCase()&&(\"checkbox\"===a.type||\"radio\"===a.type)&&(i=Wr);if(i&&(i=i(e,t)))return Mr(i,n,r);u&&u(e,a,t),\"blur\"===e&&(e=a._wrapperState)&&e.controlled&&\"number\"===a.type&&Re(a,\"number\",a.value)}},$r={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",dependencies:[\"pointerout\",\"pointerover\"]}},Kr={eventTypes:$r,extractEvents:function(e,t,n,r,a){var o=\"mouseover\"===e||\"pointerover\"===e,i=\"mouseout\"===e||\"pointerout\"===e;if(o&&0===(32&a)&&(n.relatedTarget||n.fromElement)||!i&&!o)return null;if(a=r.window===r?r:(a=r.ownerDocument)?a.defaultView||a.parentWindow:window,i?(i=t,null!==(t=(t=n.relatedTarget||n.toElement)?ur(t):null)&&(t!==(o=wt(t))||5!==t.tag&&6!==t.tag)&&(t=null)):i=null,i===t)return null;if(\"mouseout\"===e||\"mouseover\"===e)var u=Xt,l=$r.mouseLeave,s=$r.mouseEnter,c=\"mouse\";else\"pointerout\"!==e&&\"pointerover\"!==e||(u=Jt,l=$r.pointerLeave,s=$r.pointerEnter,c=\"pointer\");if(e=null==i?a:sr(i),a=null==t?a:sr(t),(l=u.getPooled(l,i,n,r)).type=c+\"leave\",l.target=e,l.relatedTarget=a,(n=u.getPooled(s,t,n,r)).type=c+\"enter\",n.target=a,n.relatedTarget=e,c=t,(r=i)&&c)e:{for(s=c,e=0,i=u=r;i;i=_t(i))e++;for(i=0,t=s;t;t=_t(t))i++;for(;0<e-i;)u=_t(u),e--;for(;0<i-e;)s=_t(s),i--;for(;e--;){if(u===s||u===s.alternate)break e;u=_t(u),s=_t(s)}u=null}else u=null;for(s=u,u=[];r&&r!==s&&(null===(e=r.alternate)||e!==s);)u.push(r),r=_t(r);for(r=[];c&&c!==s&&(null===(e=c.alternate)||e!==s);)r.push(c),c=_t(c);for(c=0;c<u.length;c++)Ct(u[c],\"bubbled\",l);for(c=r.length;0<c--;)Ct(r[c],\"captured\",n);return[l,n]}};var Qr=\"function\"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t},Gr=Object.prototype.hasOwnProperty;function Yr(e,t){if(Qr(e,t))return!0;if(\"object\"!==typeof e||null===e||\"object\"!==typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!Gr.call(t,n[r])||!Qr(e[n[r]],t[n[r]]))return!1;return!0}var Xr=Z&&\"documentMode\"in document&&11>=document.documentMode,Jr={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},Zr=null,ea=null,ta=null,na=!1;function ra(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;return na||null==Zr||Zr!==Un(n)?null:(\"selectionStart\"in(n=Zr)&&qn(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},ta&&Yr(ta,n)?null:(ta=n,(e=Mt.getPooled(Jr.select,ea,e,t)).type=\"select\",e.target=Zr,Pt(e),e))}var aa={eventTypes:Jr,extractEvents:function(e,t,n,r){var a,o=r.window===r?r.document:9===r.nodeType?r:r.ownerDocument;if(!(a=!o)){e:{o=Pn(o),a=b.onSelect;for(var i=0;i<a.length;i++)if(!o.has(a[i])){o=!1;break e}o=!0}a=!o}if(a)return null;switch(o=t?sr(t):window,e){case\"focus\":(Nr(o)||\"true\"===o.contentEditable)&&(Zr=o,ea=t,ta=null);break;case\"blur\":ta=ea=Zr=null;break;case\"mousedown\":na=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":return na=!1,ra(n,r);case\"selectionchange\":if(Xr)break;case\"keydown\":case\"keyup\":return ra(n,r)}return null}};R.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \")),k=cr,E=lr,_=sr,R.injectEventPluginsByName({SimpleEventPlugin:bn,EnterLeaveEventPlugin:Kr,ChangeEventPlugin:Hr,SelectEventPlugin:aa,BeforeInputEventPlugin:Or}),new Set;var oa=[],ia=-1;function ua(e){0>ia||(e.current=oa[ia],oa[ia]=null,ia--)}function la(e,t){oa[++ia]=e.current,e.current=t}var sa={},ca={current:sa},fa={current:!1},da=sa;function pa(e,t){var n=e.type.contextTypes;if(!n)return sa;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function ba(e){return null!==(e=e.childContextTypes)&&void 0!==e}function ha(e){ua(fa),ua(ca)}function ma(e){ua(fa),ua(ca)}function ya(e,t,n){if(ca.current!==sa)throw i(Error(168));la(ca,t),la(fa,n)}function va(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,\"function\"!==typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw i(Error(108),X(t)||\"Unknown\",o);return a({},n,{},r)}function ga(e){var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||sa,da=ca.current,la(ca,t),la(fa,fa.current),!0}function wa(e,t,n){var r=e.stateNode;if(!r)throw i(Error(169));n?(t=va(e,t,da),r.__reactInternalMemoizedMergedChildContext=t,ua(fa),ua(ca),la(ca,t)):ua(fa),la(fa,n)}var xa=o.unstable_runWithPriority,ka=o.unstable_scheduleCallback,Ea=o.unstable_cancelCallback,_a=o.unstable_shouldYield,Ta=o.unstable_requestPaint,Sa=o.unstable_now,Ca=o.unstable_getCurrentPriorityLevel,Oa=o.unstable_ImmediatePriority,Pa=o.unstable_UserBlockingPriority,Na=o.unstable_NormalPriority,Ra=o.unstable_LowPriority,Ma=o.unstable_IdlePriority,Aa={},ja=void 0!==Ta?Ta:function(){},Fa=null,La=null,Da=!1,Ia=Sa(),za=1e4>Ia?Sa:function(){return Sa()-Ia};function Ua(){switch(Ca()){case Oa:return 99;case Pa:return 98;case Na:return 97;case Ra:return 96;case Ma:return 95;default:throw i(Error(332))}}function Ba(e){switch(e){case 99:return Oa;case 98:return Pa;case 97:return Na;case 96:return Ra;case 95:return Ma;default:throw i(Error(332))}}function Va(e,t){return e=Ba(e),xa(e,t)}function Wa(e,t,n){return e=Ba(e),ka(e,t,n)}function qa(e){return null===Fa?(Fa=[e],La=ka(Oa,$a)):Fa.push(e),Aa}function Ha(){if(null!==La){var e=La;La=null,Ea(e)}$a()}function $a(){if(!Da&&null!==Fa){Da=!0;var e=0;try{var t=Fa;Va(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Fa=null}catch(n){throw null!==Fa&&(Fa=Fa.slice(e+1)),ka(Oa,Ha),n}finally{Da=!1}}}function Ka(e,t){if(e&&e.defaultProps)for(var n in t=a({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var Qa={current:null},Ga=null,Ya=null,Xa=null;function Ja(){Xa=Ya=Ga=null}function Za(e,t){var n=e.type._context;la(Qa,n._currentValue),n._currentValue=t}function eo(e){var t=Qa.current;ua(Qa),e.type._context._currentValue=t}function to(e,t){for(;null!==e;){var n=e.alternate;if(e.childExpirationTime<t)e.childExpirationTime=t,null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t);else{if(!(null!==n&&n.childExpirationTime<t))break;n.childExpirationTime=t}e=e.return}}function no(e,t){Ga=e,Xa=Ya=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(e.expirationTime>=t&&(Ni=!0),e.firstContext=null)}function ro(e,t){if(Xa!==e&&!1!==t&&0!==t)if(\"number\"===typeof t&&1073741823!==t||(Xa=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Ya){if(null===Ga)throw i(Error(308));Ya=t,Ga.dependencies={expirationTime:0,firstContext:t,responders:null}}else Ya=Ya.next=t;return e._currentValue}var ao=!1;function oo(e){return{baseState:e,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function io(e){return{baseState:e.baseState,firstUpdate:e.firstUpdate,lastUpdate:e.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function uo(e,t){return{expirationTime:e,suspenseConfig:t,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function lo(e,t){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.lastUpdate.next=t,e.lastUpdate=t)}function so(e,t){var n=e.alternate;if(null===n){var r=e.updateQueue,a=null;null===r&&(r=e.updateQueue=oo(e.memoizedState))}else r=e.updateQueue,a=n.updateQueue,null===r?null===a?(r=e.updateQueue=oo(e.memoizedState),a=n.updateQueue=oo(n.memoizedState)):r=e.updateQueue=io(a):null===a&&(a=n.updateQueue=io(r));null===a||r===a?lo(r,t):null===r.lastUpdate||null===a.lastUpdate?(lo(r,t),lo(a,t)):(lo(r,t),a.lastUpdate=t)}function co(e,t){var n=e.updateQueue;null===(n=null===n?e.updateQueue=oo(e.memoizedState):fo(e,n)).lastCapturedUpdate?n.firstCapturedUpdate=n.lastCapturedUpdate=t:(n.lastCapturedUpdate.next=t,n.lastCapturedUpdate=t)}function fo(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(t=e.updateQueue=io(t)),t}function po(e,t,n,r,o,i){switch(n.tag){case 1:return\"function\"===typeof(e=n.payload)?e.call(i,r,o):e;case 3:e.effectTag=-4097&e.effectTag|64;case 0:if(null===(o=\"function\"===typeof(e=n.payload)?e.call(i,r,o):e)||void 0===o)break;return a({},r,o);case 2:ao=!0}return r}function bo(e,t,n,r,a){ao=!1;for(var o=(t=fo(e,t)).baseState,i=null,u=0,l=t.firstUpdate,s=o;null!==l;){var c=l.expirationTime;c<a?(null===i&&(i=l,o=s),u<c&&(u=c)):(ml(c,l.suspenseConfig),s=po(e,0,l,s,n,r),null!==l.callback&&(e.effectTag|=32,l.nextEffect=null,null===t.lastEffect?t.firstEffect=t.lastEffect=l:(t.lastEffect.nextEffect=l,t.lastEffect=l))),l=l.next}for(c=null,l=t.firstCapturedUpdate;null!==l;){var f=l.expirationTime;f<a?(null===c&&(c=l,null===i&&(o=s)),u<f&&(u=f)):(s=po(e,0,l,s,n,r),null!==l.callback&&(e.effectTag|=32,l.nextEffect=null,null===t.lastCapturedEffect?t.firstCapturedEffect=t.lastCapturedEffect=l:(t.lastCapturedEffect.nextEffect=l,t.lastCapturedEffect=l))),l=l.next}null===i&&(t.lastUpdate=null),null===c?t.lastCapturedUpdate=null:e.effectTag|=32,null===i&&null===c&&(o=s),t.baseState=o,t.firstUpdate=i,t.firstCapturedUpdate=c,yl(u),e.expirationTime=u,e.memoizedState=s}function ho(e,t,n){null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(t.lastUpdate.next=t.firstCapturedUpdate,t.lastUpdate=t.lastCapturedUpdate),t.firstCapturedUpdate=t.lastCapturedUpdate=null),mo(t.firstEffect,n),t.firstEffect=t.lastEffect=null,mo(t.firstCapturedEffect,n),t.firstCapturedEffect=t.lastCapturedEffect=null}function mo(e,t){for(;null!==e;){var n=e.callback;if(null!==n){e.callback=null;var r=t;if(\"function\"!==typeof n)throw i(Error(191),n);n.call(r)}e=e.nextEffect}}var yo=A.ReactCurrentBatchConfig,vo=(new r.Component).refs;function go(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:a({},t,n),e.memoizedState=n,null!==(r=e.updateQueue)&&0===e.expirationTime&&(r.baseState=n)}var wo={isMounted:function(e){return!!(e=e._reactInternalFiber)&&wt(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var r=Ju(),a=yo.suspense;(a=uo(r=Zu(r,e,a),a)).payload=t,void 0!==n&&null!==n&&(a.callback=n),so(e,a),nl(e,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var r=Ju(),a=yo.suspense;(a=uo(r=Zu(r,e,a),a)).tag=1,a.payload=t,void 0!==n&&null!==n&&(a.callback=n),so(e,a),nl(e,r)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=Ju(),r=yo.suspense;(r=uo(n=Zu(n,e,r),r)).tag=2,void 0!==t&&null!==t&&(r.callback=t),so(e,r),nl(e,n)}};function xo(e,t,n,r,a,o,i){return\"function\"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!Yr(n,r)||!Yr(a,o))}function ko(e,t,n){var r=!1,a=sa,o=t.contextType;return\"object\"===typeof o&&null!==o?o=ro(o):(a=ba(t)?da:ca.current,o=(r=null!==(r=t.contextTypes)&&void 0!==r)?pa(e,a):sa),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=wo,e.stateNode=t,t._reactInternalFiber=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function Eo(e,t,n,r){e=t.state,\"function\"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),\"function\"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&wo.enqueueReplaceState(t,t.state,null)}function _o(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=vo;var o=t.contextType;\"object\"===typeof o&&null!==o?a.context=ro(o):(o=ba(t)?da:ca.current,a.context=pa(e,o)),null!==(o=e.updateQueue)&&(bo(e,o,n,a,r),a.state=e.memoizedState),\"function\"===typeof(o=t.getDerivedStateFromProps)&&(go(e,t,o,n),a.state=e.memoizedState),\"function\"===typeof t.getDerivedStateFromProps||\"function\"===typeof a.getSnapshotBeforeUpdate||\"function\"!==typeof a.UNSAFE_componentWillMount&&\"function\"!==typeof a.componentWillMount||(t=a.state,\"function\"===typeof a.componentWillMount&&a.componentWillMount(),\"function\"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&wo.enqueueReplaceState(a,a.state,null),null!==(o=e.updateQueue)&&(bo(e,o,n,a,r),a.state=e.memoizedState)),\"function\"===typeof a.componentDidMount&&(e.effectTag|=4)}var To=Array.isArray;function So(e,t,n){if(null!==(e=n.ref)&&\"function\"!==typeof e&&\"object\"!==typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw i(Error(309));var r=n.stateNode}if(!r)throw i(Error(147),e);var a=\"\"+e;return null!==t&&null!==t.ref&&\"function\"===typeof t.ref&&t.ref._stringRef===a?t.ref:((t=function(e){var t=r.refs;t===vo&&(t=r.refs={}),null===e?delete t[a]:t[a]=e})._stringRef=a,t)}if(\"string\"!==typeof e)throw i(Error(284));if(!n._owner)throw i(Error(290),e)}return e}function Co(e,t){if(\"textarea\"!==e.type)throw i(Error(31),\"[object Object]\"===Object.prototype.toString.call(t)?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":t,\"\")}function Oo(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t,n){return(e=Dl(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.effectTag=vt,n):r:(t.effectTag=vt,n):n}function u(t){return e&&null===t.alternate&&(t.effectTag=vt),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Ul(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function s(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=So(e,t,n),r.return=e,r):((r=Il(n.type,n.key,n.props,null,e.mode,r)).ref=So(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Bl(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function f(e,t,n,r,o){return null===t||7!==t.tag?((t=zl(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function d(e,t,n){if(\"string\"===typeof t||\"number\"===typeof t)return(t=Ul(\"\"+t,e.mode,n)).return=e,t;if(\"object\"===typeof t&&null!==t){switch(t.$$typeof){case L:return(n=Il(t.type,t.key,t.props,null,e.mode,n)).ref=So(e,null,t),n.return=e,n;case D:return(t=Bl(t,e.mode,n)).return=e,t}if(To(t)||Y(t))return(t=zl(t,e.mode,n,null)).return=e,t;Co(e,t)}return null}function p(e,t,n,r){var a=null!==t?t.key:null;if(\"string\"===typeof n||\"number\"===typeof n)return null!==a?null:l(e,t,\"\"+n,r);if(\"object\"===typeof n&&null!==n){switch(n.$$typeof){case L:return n.key===a?n.type===I?f(e,t,n.props.children,r,a):s(e,t,n,r):null;case D:return n.key===a?c(e,t,n,r):null}if(To(n)||Y(n))return null!==a?null:f(e,t,n,r,null);Co(e,n)}return null}function b(e,t,n,r,a){if(\"string\"===typeof r||\"number\"===typeof r)return l(t,e=e.get(n)||null,\"\"+r,a);if(\"object\"===typeof r&&null!==r){switch(r.$$typeof){case L:return e=e.get(null===r.key?n:r.key)||null,r.type===I?f(t,e,r.props.children,a,r.key):s(t,e,r,a);case D:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(To(r)||Y(r))return f(t,e=e.get(n)||null,r,a,null);Co(t,r)}return null}function h(a,i,u,l){for(var s=null,c=null,f=i,h=i=0,m=null;null!==f&&h<u.length;h++){f.index>h?(m=f,f=null):m=f.sibling;var y=p(a,f,u[h],l);if(null===y){null===f&&(f=m);break}e&&f&&null===y.alternate&&t(a,f),i=o(y,i,h),null===c?s=y:c.sibling=y,c=y,f=m}if(h===u.length)return n(a,f),s;if(null===f){for(;h<u.length;h++)null!==(f=d(a,u[h],l))&&(i=o(f,i,h),null===c?s=f:c.sibling=f,c=f);return s}for(f=r(a,f);h<u.length;h++)null!==(m=b(f,a,h,u[h],l))&&(e&&null!==m.alternate&&f.delete(null===m.key?h:m.key),i=o(m,i,h),null===c?s=m:c.sibling=m,c=m);return e&&f.forEach((function(e){return t(a,e)})),s}function m(a,u,l,s){var c=Y(l);if(\"function\"!==typeof c)throw i(Error(150));if(null==(l=c.call(l)))throw i(Error(151));for(var f=c=null,h=u,m=u=0,y=null,v=l.next();null!==h&&!v.done;m++,v=l.next()){h.index>m?(y=h,h=null):y=h.sibling;var g=p(a,h,v.value,s);if(null===g){null===h&&(h=y);break}e&&h&&null===g.alternate&&t(a,h),u=o(g,u,m),null===f?c=g:f.sibling=g,f=g,h=y}if(v.done)return n(a,h),c;if(null===h){for(;!v.done;m++,v=l.next())null!==(v=d(a,v.value,s))&&(u=o(v,u,m),null===f?c=v:f.sibling=v,f=v);return c}for(h=r(a,h);!v.done;m++,v=l.next())null!==(v=b(h,a,m,v.value,s))&&(e&&null!==v.alternate&&h.delete(null===v.key?m:v.key),u=o(v,u,m),null===f?c=v:f.sibling=v,f=v);return e&&h.forEach((function(e){return t(a,e)})),c}return function(e,r,o,l){var s=\"object\"===typeof o&&null!==o&&o.type===I&&null===o.key;s&&(o=o.props.children);var c=\"object\"===typeof o&&null!==o;if(c)switch(o.$$typeof){case L:e:{for(c=o.key,s=r;null!==s;){if(s.key===c){if(7===s.tag?o.type===I:s.elementType===o.type){n(e,s.sibling),(r=a(s,o.type===I?o.props.children:o.props)).ref=So(e,s,o),r.return=e,e=r;break e}n(e,s);break}t(e,s),s=s.sibling}o.type===I?((r=zl(o.props.children,e.mode,l,o.key)).return=e,e=r):((l=Il(o.type,o.key,o.props,null,e.mode,l)).ref=So(e,r,o),l.return=e,e=l)}return u(e);case D:e:{for(s=o.key;null!==r;){if(r.key===s){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=a(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Bl(o,e.mode,l)).return=e,e=r}return u(e)}if(\"string\"===typeof o||\"number\"===typeof o)return o=\"\"+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=a(r,o)).return=e,e=r):(n(e,r),(r=Ul(o,e.mode,l)).return=e,e=r),u(e);if(To(o))return h(e,r,o,l);if(Y(o))return m(e,r,o,l);if(c&&Co(e,o),\"undefined\"===typeof o&&!s)switch(e.tag){case 1:case 0:throw e=e.type,i(Error(152),e.displayName||e.name||\"Component\")}return n(e,r)}}var Po=Oo(!0),No=Oo(!1),Ro={},Mo={current:Ro},Ao={current:Ro},jo={current:Ro};function Fo(e){if(e===Ro)throw i(Error(174));return e}function Lo(e,t){la(jo,t),la(Ao,e),la(Mo,Ro);var n=t.nodeType;switch(n){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Ue(null,\"\");break;default:t=Ue(t=(n=8===n?t.parentNode:t).namespaceURI||null,n=n.tagName)}ua(Mo),la(Mo,t)}function Do(e){ua(Mo),ua(Ao),ua(jo)}function Io(e){Fo(jo.current);var t=Fo(Mo.current),n=Ue(t,e.type);t!==n&&(la(Ao,e),la(Mo,n))}function zo(e){Ao.current===e&&(ua(Mo),ua(Ao))}var Uo={current:0};function Bo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||n.data===Kn||n.data===Qn))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if((64&t.effectTag)!==yt)return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function Vo(e,t){return{responder:e,props:t}}var Wo=A.ReactCurrentDispatcher,qo=0,Ho=null,$o=null,Ko=null,Qo=null,Go=null,Yo=null,Xo=0,Jo=null,Zo=0,ei=!1,ti=null,ni=0;function ri(){throw i(Error(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Qr(e[n],t[n]))return!1;return!0}function oi(e,t,n,r,a,o){if(qo=o,Ho=t,Ko=null!==e?e.memoizedState:null,Wo.current=null===Ko?vi:gi,t=n(r,a),ei){do{ei=!1,ni+=1,Ko=null!==e?e.memoizedState:null,Yo=Qo,Jo=Go=$o=null,Wo.current=gi,t=n(r,a)}while(ei);ti=null,ni=0}if(Wo.current=yi,(e=Ho).memoizedState=Qo,e.expirationTime=Xo,e.updateQueue=Jo,e.effectTag|=Zo,e=null!==$o&&null!==$o.next,qo=0,Yo=Go=Qo=Ko=$o=Ho=null,Xo=0,Jo=null,Zo=0,e)throw i(Error(300));return t}function ii(){Wo.current=yi,qo=0,Yo=Go=Qo=Ko=$o=Ho=null,Xo=0,Jo=null,Zo=0,ei=!1,ti=null,ni=0}function ui(){var e={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};return null===Go?Qo=Go=e:Go=Go.next=e,Go}function li(){if(null!==Yo)Yo=(Go=Yo).next,Ko=null!==($o=Ko)?$o.next:null;else{if(null===Ko)throw i(Error(310));var e={memoizedState:($o=Ko).memoizedState,baseState:$o.baseState,queue:$o.queue,baseUpdate:$o.baseUpdate,next:null};Go=null===Go?Qo=e:Go.next=e,Ko=$o.next}return Go}function si(e,t){return\"function\"===typeof t?t(e):t}function ci(e){var t=li(),n=t.queue;if(null===n)throw i(Error(311));if(n.lastRenderedReducer=e,0<ni){var r=n.dispatch;if(null!==ti){var a=ti.get(n);if(void 0!==a){ti.delete(n);var o=t.memoizedState;do{o=e(o,a.action),a=a.next}while(null!==a);return Qr(o,t.memoizedState)||(Ni=!0),t.memoizedState=o,t.baseUpdate===n.last&&(t.baseState=o),n.lastRenderedState=o,[o,r]}}return[t.memoizedState,r]}r=n.last;var u=t.baseUpdate;if(o=t.baseState,null!==u?(null!==r&&(r.next=null),r=u.next):r=null!==r?r.next:null,null!==r){var l=a=null,s=r,c=!1;do{var f=s.expirationTime;f<qo?(c||(c=!0,l=u,a=o),f>Xo&&yl(Xo=f)):(ml(f,s.suspenseConfig),o=s.eagerReducer===e?s.eagerState:e(o,s.action)),u=s,s=s.next}while(null!==s&&s!==r);c||(l=u,a=o),Qr(o,t.memoizedState)||(Ni=!0),t.memoizedState=o,t.baseUpdate=l,t.baseState=a,n.lastRenderedState=o}return[t.memoizedState,n.dispatch]}function fi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===Jo?(Jo={lastEffect:null}).lastEffect=e.next=e:null===(t=Jo.lastEffect)?Jo.lastEffect=e.next=e:(n=t.next,t.next=e,e.next=n,Jo.lastEffect=e),e}function di(e,t,n,r){var a=ui();Zo|=e,a.memoizedState=fi(t,n,void 0,void 0===r?null:r)}function pi(e,t,n,r){var a=li();r=void 0===r?null:r;var o=void 0;if(null!==$o){var i=$o.memoizedState;if(o=i.destroy,null!==r&&ai(r,i.deps))return void fi(0,n,o,r)}Zo|=e,a.memoizedState=fi(t,n,o,r)}function bi(e,t){return\"function\"===typeof t?(e=e(),t(e),function(){t(null)}):null!==t&&void 0!==t?(e=e(),t.current=e,function(){t.current=null}):void 0}function hi(){}function mi(e,t,n){if(!(25>ni))throw i(Error(301));var r=e.alternate;if(e===Ho||null!==r&&r===Ho)if(ei=!0,e={expirationTime:qo,suspenseConfig:null,action:n,eagerReducer:null,eagerState:null,next:null},null===ti&&(ti=new Map),void 0===(n=ti.get(t)))ti.set(t,e);else{for(t=n;null!==t.next;)t=t.next;t.next=e}else{var a=Ju(),o=yo.suspense;o={expirationTime:a=Zu(a,e,o),suspenseConfig:o,action:n,eagerReducer:null,eagerState:null,next:null};var u=t.last;if(null===u)o.next=o;else{var l=u.next;null!==l&&(o.next=l),u.next=o}if(t.last=o,0===e.expirationTime&&(null===r||0===r.expirationTime)&&null!==(r=t.lastRenderedReducer))try{var s=t.lastRenderedState,c=r(s,n);if(o.eagerReducer=r,o.eagerState=c,Qr(c,s))return}catch(f){}nl(e,a)}}var yi={readContext:ro,useCallback:ri,useContext:ri,useEffect:ri,useImperativeHandle:ri,useLayoutEffect:ri,useMemo:ri,useReducer:ri,useRef:ri,useState:ri,useDebugValue:ri,useResponder:ri},vi={readContext:ro,useCallback:function(e,t){return ui().memoizedState=[e,void 0===t?null:t],e},useContext:ro,useEffect:function(e,t){return di(516,192,e,t)},useImperativeHandle:function(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,di(4,36,bi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return di(4,36,e,t)},useMemo:function(e,t){var n=ui();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ui();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={last:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=mi.bind(null,Ho,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},ui().memoizedState=e},useState:function(e){var t=ui();return\"function\"===typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={last:null,dispatch:null,lastRenderedReducer:si,lastRenderedState:e}).dispatch=mi.bind(null,Ho,e),[t.memoizedState,e]},useDebugValue:hi,useResponder:Vo},gi={readContext:ro,useCallback:function(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)},useContext:ro,useEffect:function(e,t){return pi(516,192,e,t)},useImperativeHandle:function(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,pi(4,36,bi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return pi(4,36,e,t)},useMemo:function(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)},useReducer:ci,useRef:function(){return li().memoizedState},useState:function(e){return ci(si)},useDebugValue:hi,useResponder:Vo},wi=null,xi=null,ki=!1;function Ei(e,t){var n=Fl(5,null,null,0);n.elementType=\"DELETED\",n.type=\"DELETED\",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function _i(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=\"\"===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function Ti(e){if(ki){var t=xi;if(t){var n=t;if(!_i(e,t)){if(!(t=tr(n.nextSibling))||!_i(e,t))return e.effectTag=e.effectTag&~gt|vt,ki=!1,void(wi=e);Ei(wi,n)}wi=e,xi=tr(t.firstChild)}else e.effectTag=e.effectTag&~gt|vt,ki=!1,wi=e}}function Si(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;wi=e}function Ci(e){if(e!==wi)return!1;if(!ki)return Si(e),ki=!0,!1;var t=e.type;if(5!==e.tag||\"head\"!==t&&\"body\"!==t&&!Jn(t,e.memoizedProps))for(t=xi;t;)Ei(e,t),t=tr(t.nextSibling);if(Si(e),13===e.tag)if(null===(e=null!==(e=e.memoizedState)?e.dehydrated:null))e=xi;else e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if(n===$n){if(0===t){e=tr(e.nextSibling);break e}t--}else n!==Hn&&n!==Qn&&n!==Kn||t++}e=e.nextSibling}e=null}else e=wi?tr(e.stateNode.nextSibling):null;return xi=e,!0}function Oi(){xi=wi=null,ki=!1}var Pi=A.ReactCurrentOwner,Ni=!1;function Ri(e,t,n,r){t.child=null===e?No(t,null,n,r):Po(t,e.child,n,r)}function Mi(e,t,n,r,a){n=n.render;var o=t.ref;return no(t,a),r=oi(e,t,n,r,o,a),null===e||Ni?(t.effectTag|=1,Ri(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=a&&(e.expirationTime=0),Qi(e,t,a))}function Ai(e,t,n,r,a,o){if(null===e){var i=n.type;return\"function\"!==typeof i||Ll(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Il(n.type,null,r,null,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,ji(e,t,i,r,a,o))}return i=e.child,a<o&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:Yr)(a,r)&&e.ref===t.ref)?Qi(e,t,o):(t.effectTag|=1,(e=Dl(i,r)).ref=t.ref,e.return=t,t.child=e)}function ji(e,t,n,r,a,o){return null!==e&&Yr(e.memoizedProps,r)&&e.ref===t.ref&&(Ni=!1,a<o)?Qi(e,t,o):Li(e,t,n,r,o)}function Fi(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function Li(e,t,n,r,a){var o=ba(n)?da:ca.current;return o=pa(t,o),no(t,a),n=oi(e,t,n,r,o,a),null===e||Ni?(t.effectTag|=1,Ri(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=a&&(e.expirationTime=0),Qi(e,t,a))}function Di(e,t,n,r,a){if(ba(n)){var o=!0;ga(t)}else o=!1;if(no(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=vt),ko(t,n,r),_o(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,u=t.memoizedProps;i.props=u;var l=i.context,s=n.contextType;\"object\"===typeof s&&null!==s?s=ro(s):s=pa(t,s=ba(n)?da:ca.current);var c=n.getDerivedStateFromProps,f=\"function\"===typeof c||\"function\"===typeof i.getSnapshotBeforeUpdate;f||\"function\"!==typeof i.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof i.componentWillReceiveProps||(u!==r||l!==s)&&Eo(t,i,r,s),ao=!1;var d=t.memoizedState;l=i.state=d;var p=t.updateQueue;null!==p&&(bo(t,p,r,i,a),l=t.memoizedState),u!==r||d!==l||fa.current||ao?(\"function\"===typeof c&&(go(t,n,c,r),l=t.memoizedState),(u=ao||xo(t,n,u,r,d,l,s))?(f||\"function\"!==typeof i.UNSAFE_componentWillMount&&\"function\"!==typeof i.componentWillMount||(\"function\"===typeof i.componentWillMount&&i.componentWillMount(),\"function\"===typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),\"function\"===typeof i.componentDidMount&&(t.effectTag|=4)):(\"function\"===typeof i.componentDidMount&&(t.effectTag|=4),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=s,r=u):(\"function\"===typeof i.componentDidMount&&(t.effectTag|=4),r=!1)}else i=t.stateNode,u=t.memoizedProps,i.props=t.type===t.elementType?u:Ka(t.type,u),l=i.context,\"object\"===typeof(s=n.contextType)&&null!==s?s=ro(s):s=pa(t,s=ba(n)?da:ca.current),(f=\"function\"===typeof(c=n.getDerivedStateFromProps)||\"function\"===typeof i.getSnapshotBeforeUpdate)||\"function\"!==typeof i.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof i.componentWillReceiveProps||(u!==r||l!==s)&&Eo(t,i,r,s),ao=!1,l=t.memoizedState,d=i.state=l,null!==(p=t.updateQueue)&&(bo(t,p,r,i,a),d=t.memoizedState),u!==r||l!==d||fa.current||ao?(\"function\"===typeof c&&(go(t,n,c,r),d=t.memoizedState),(c=ao||xo(t,n,u,r,l,d,s))?(f||\"function\"!==typeof i.UNSAFE_componentWillUpdate&&\"function\"!==typeof i.componentWillUpdate||(\"function\"===typeof i.componentWillUpdate&&i.componentWillUpdate(r,d,s),\"function\"===typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,d,s)),\"function\"===typeof i.componentDidUpdate&&(t.effectTag|=4),\"function\"===typeof i.getSnapshotBeforeUpdate&&(t.effectTag|=256)):(\"function\"!==typeof i.componentDidUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=4),\"function\"!==typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=256),t.memoizedProps=r,t.memoizedState=d),i.props=r,i.state=d,i.context=s,r=c):(\"function\"!==typeof i.componentDidUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=4),\"function\"!==typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=256),r=!1);return Ii(e,t,n,r,o,a)}function Ii(e,t,n,r,a,o){Fi(e,t);var i=(64&t.effectTag)!==yt;if(!r&&!i)return a&&wa(t,n,!1),Qi(e,t,o);r=t.stateNode,Pi.current=t;var u=i&&\"function\"!==typeof n.getDerivedStateFromError?null:r.render();return t.effectTag|=1,null!==e&&i?(t.child=Po(t,e.child,null,o),t.child=Po(t,null,u,o)):Ri(e,t,u,o),t.memoizedState=r.state,a&&wa(t,n,!0),t.child}function zi(e){var t=e.stateNode;t.pendingContext?ya(0,t.pendingContext,t.pendingContext!==t.context):t.context&&ya(0,t.context,!1),Lo(e,t.containerInfo)}var Ui,Bi,Vi,Wi,qi={dehydrated:null,retryTime:1};function Hi(e,t,n){var r,a=t.mode,o=t.pendingProps,i=Uo.current,u=!1;if((r=(64&t.effectTag)!==yt)||(r=0!==(2&i)&&(null===e||null!==e.memoizedState)),r?(u=!0,t.effectTag&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(i|=1),la(Uo,1&i),null===e){if(u){if(u=o.fallback,(o=zl(null,a,0,null)).return=t,0===(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,o.child=e;null!==e;)e.return=o,e=e.sibling;return(n=zl(u,a,n,null)).return=t,o.sibling=n,t.memoizedState=qi,t.child=o,n}return a=o.children,t.memoizedState=null,t.child=No(t,null,a,n)}if(null!==e.memoizedState){if(a=(e=e.child).sibling,u){if(o=o.fallback,(n=Dl(e,e.pendingProps)).return=t,0===(2&t.mode)&&(u=null!==t.memoizedState?t.child.child:t.child)!==e.child)for(n.child=u;null!==u;)u.return=n,u=u.sibling;return(a=Dl(a,o,a.expirationTime)).return=t,n.sibling=a,n.childExpirationTime=0,t.memoizedState=qi,t.child=n,a}return n=Po(t,e.child,o.children,n),t.memoizedState=null,t.child=n}if(e=e.child,u){if(u=o.fallback,(o=zl(null,a,0,null)).return=t,o.child=e,null!==e&&(e.return=o),0===(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,o.child=e;null!==e;)e.return=o,e=e.sibling;return(n=zl(u,a,n,null)).return=t,o.sibling=n,n.effectTag|=vt,o.childExpirationTime=0,t.memoizedState=qi,t.child=o,n}return t.memoizedState=null,t.child=Po(t,e,o.children,n)}function $i(e,t,n,r,a){var o=e.memoizedState;null===o?e.memoizedState={isBackwards:t,rendering:null,last:r,tail:n,tailExpiration:0,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.last=r,o.tail=n,o.tailExpiration=0,o.tailMode=a)}function Ki(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Ri(e,t,r.children,n),0!==(2&(r=Uo.current)))r=1&r|2,t.effectTag|=64;else{if(null!==e&&(64&e.effectTag)!==yt)e:for(e=t.child;null!==e;){if(13===e.tag){if(null!==e.memoizedState){e.expirationTime<n&&(e.expirationTime=n);var i=e.alternate;null!==i&&i.expirationTime<n&&(i.expirationTime=n),to(e.return,n)}}else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(la(Uo,r),0===(2&t.mode))t.memoizedState=null;else switch(a){case\"forwards\":for(n=t.child,a=null;null!==n;)null!==(r=n.alternate)&&null===Bo(r)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),$i(t,!1,a,n,o);break;case\"backwards\":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(r=a.alternate)&&null===Bo(r)){t.child=a;break}r=a.sibling,a.sibling=n,n=a,a=r}$i(t,!0,n,null,o);break;case\"together\":$i(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Qi(e,t,n){null!==e&&(t.dependencies=e.dependencies);var r=t.expirationTime;if(0!==r&&yl(r),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child)throw i(Error(153));if(null!==t.child){for(n=Dl(e=t.child,e.pendingProps,e.expirationTime),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Dl(e,e.pendingProps,e.expirationTime)).return=t;n.sibling=null}return t.child}function Gi(e){e.effectTag|=4}function Yi(e,t){switch(e.tailMode){case\"hidden\":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case\"collapsed\":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Xi(e){switch(e.tag){case 1:ba(e.type)&&ha();var t=e.effectTag;return 4096&t?(e.effectTag=-4097&t|64,e):null;case 3:if(Do(),ma(),(64&(t=e.effectTag))!==yt)throw i(Error(285));return e.effectTag=-4097&t|64,e;case 5:return zo(e),null;case 13:return ua(Uo),4096&(t=e.effectTag)?(e.effectTag=-4097&t|64,e):null;case 19:return ua(Uo),null;case 4:return Do(),null;case 10:return eo(e),null;default:return null}}function Ji(e,t){return{value:e,source:t,stack:J(t)}}Ui=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Bi=function(){},Vi=function(e,t,n,r,o){var i=e.memoizedProps;if(i!==r){var u,l,s=t.stateNode;switch(Fo(Mo.current),e=null,n){case\"input\":i=Se(s,i),r=Se(s,r),e=[];break;case\"option\":i=Me(s,i),r=Me(s,r),e=[];break;case\"select\":i=a({},i,{value:void 0}),r=a({},r,{value:void 0}),e=[];break;case\"textarea\":i=je(s,i),r=je(s,r),e=[];break;default:\"function\"!==typeof i.onClick&&\"function\"===typeof r.onClick&&(s.onclick=zn)}for(u in Ln(n,r),n=null,i)if(!r.hasOwnProperty(u)&&i.hasOwnProperty(u)&&null!=i[u])if(\"style\"===u)for(l in s=i[u])s.hasOwnProperty(l)&&(n||(n={}),n[l]=\"\");else\"dangerouslySetInnerHTML\"!==u&&\"children\"!==u&&\"suppressContentEditableWarning\"!==u&&\"suppressHydrationWarning\"!==u&&\"autoFocus\"!==u&&(p.hasOwnProperty(u)?e||(e=[]):(e=e||[]).push(u,null));for(u in r){var c=r[u];if(s=null!=i?i[u]:void 0,r.hasOwnProperty(u)&&c!==s&&(null!=c||null!=s))if(\"style\"===u)if(s){for(l in s)!s.hasOwnProperty(l)||c&&c.hasOwnProperty(l)||(n||(n={}),n[l]=\"\");for(l in c)c.hasOwnProperty(l)&&s[l]!==c[l]&&(n||(n={}),n[l]=c[l])}else n||(e||(e=[]),e.push(u,n)),n=c;else\"dangerouslySetInnerHTML\"===u?(c=c?c.__html:void 0,s=s?s.__html:void 0,null!=c&&s!==c&&(e=e||[]).push(u,\"\"+c)):\"children\"===u?s===c||\"string\"!==typeof c&&\"number\"!==typeof c||(e=e||[]).push(u,\"\"+c):\"suppressContentEditableWarning\"!==u&&\"suppressHydrationWarning\"!==u&&(p.hasOwnProperty(u)?(null!=c&&In(o,u),e||s===c||(e=[])):(e=e||[]).push(u,c))}n&&(e=e||[]).push(\"style\",n),o=e,(t.updateQueue=o)&&Gi(t)}},Wi=function(e,t,n,r){n!==r&&Gi(t)};var Zi=\"function\"===typeof WeakSet?WeakSet:Set;function eu(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=J(n)),null!==n&&X(n.type),t=t.value,null!==e&&1===e.tag&&X(e.type);try{console.error(t)}catch(a){setTimeout((function(){throw a}))}}function tu(e){var t=e.ref;if(null!==t)if(\"function\"===typeof t)try{t(null)}catch(n){Pl(e,n)}else t.current=null}function nu(e,t){switch(t.tag){case 0:case 11:case 15:ru(2,0,t);break;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ka(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}break;case 3:case 5:case 6:case 4:case 17:break;default:throw i(Error(163))}}function ru(e,t,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var r=n=n.next;do{if(0!==(r.tag&e)){var a=r.destroy;r.destroy=void 0,void 0!==a&&a()}0!==(r.tag&t)&&(a=r.create,r.destroy=a()),r=r.next}while(r!==n)}}function au(e,t,n){switch(\"function\"===typeof Al&&Al(t),t.tag){case 0:case 11:case 14:case 15:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var r=e.next;Va(97<n?97:n,(function(){var e=r;do{var n=e.destroy;if(void 0!==n){var a=t;try{n()}catch(o){Pl(a,o)}}e=e.next}while(e!==r)}))}break;case 1:tu(t),\"function\"===typeof(n=t.stateNode).componentWillUnmount&&function(e,t){try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(n){Pl(e,n)}}(t,n);break;case 5:tu(t);break;case 4:lu(e,t,n)}}function ou(e){var t=e.alternate;e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.alternate=null,e.firstEffect=null,e.lastEffect=null,e.pendingProps=null,e.memoizedProps=null,null!==t&&ou(t)}function iu(e){return 5===e.tag||3===e.tag||4===e.tag}function uu(e){e:{for(var t=e.return;null!==t;){if(iu(t)){var n=t;break e}t=t.return}throw i(Error(160))}switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw i(Error(161))}16&n.effectTag&&(We(t,\"\"),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||iu(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(n.effectTag&vt)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(n.effectTag&vt)){n=n.stateNode;break e}}for(var a=e;;){var o=5===a.tag||6===a.tag;if(o){var u=o?a.stateNode:a.stateNode.instance;if(n)if(r){var l=u;u=n,8===(o=t).nodeType?o.parentNode.insertBefore(l,u):o.insertBefore(l,u)}else t.insertBefore(u,n);else r?(8===(l=t).nodeType?(o=l.parentNode).insertBefore(u,l):(o=l).appendChild(u),null!==(l=l._reactRootContainer)&&void 0!==l||null!==o.onclick||(o.onclick=zn)):t.appendChild(u)}else if(4!==a.tag&&null!==a.child){a.child.return=a,a=a.child;continue}if(a===e)break;for(;null===a.sibling;){if(null===a.return||a.return===e)return;a=a.return}a.sibling.return=a.return,a=a.sibling}}function lu(e,t,n){for(var r,a,o=t,u=!1;;){if(!u){u=o.return;e:for(;;){if(null===u)throw i(Error(160));switch(r=u.stateNode,u.tag){case 5:a=!1;break e;case 3:case 4:r=r.containerInfo,a=!0;break e}u=u.return}u=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,c=n,f=s;;)if(au(l,f,c),null!==f.child&&4!==f.tag)f.child.return=f,f=f.child;else{if(f===s)break;for(;null===f.sibling;){if(null===f.return||f.return===s)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}a?(l=r,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):r.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){r=o.stateNode.containerInfo,a=!0,o.child.return=o,o=o.child;continue}}else if(au(e,o,n),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(u=!1)}o.sibling.return=o.return,o=o.sibling}}function su(e,t){switch(t.tag){case 0:case 11:case 14:case 15:ru(4,8,t);break;case 1:break;case 5:var n=t.stateNode;if(null!=n){var r=t.memoizedProps,a=null!==e?e.memoizedProps:r;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[or]=r,\"input\"===e&&\"radio\"===r.type&&null!=r.name&&Oe(n,r),Dn(e,a),t=Dn(e,r),a=0;a<o.length;a+=2){var u=o[a],l=o[a+1];\"style\"===u?jn(n,l):\"dangerouslySetInnerHTML\"===u?Ve(n,l):\"children\"===u?We(n,l):ke(n,u,l,t)}switch(e){case\"input\":Pe(n,r);break;case\"textarea\":Le(n,r);break;case\"select\":t=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(e=r.value)?Ae(n,!!r.multiple,e,!1):t!==!!r.multiple&&(null!=r.defaultValue?Ae(n,!!r.multiple,r.defaultValue,!0):Ae(n,!!r.multiple,r.multiple?[]:\"\",!1))}}}break;case 6:if(null===t.stateNode)throw i(Error(162));t.stateNode.nodeValue=t.memoizedProps;break;case 3:(t=t.stateNode).hydrate&&(t.hydrate=!1,mt(t.containerInfo));break;case 12:break;case 13:if(n=t,null===t.memoizedState?r=!1:(r=!0,n=t.child,zu=za()),null!==n)e:for(e=n;;){if(5===e.tag)o=e.stateNode,r?\"function\"===typeof(o=o.style).setProperty?o.setProperty(\"display\",\"none\",\"important\"):o.display=\"none\":(o=e.stateNode,a=void 0!==(a=e.memoizedProps.style)&&null!==a&&a.hasOwnProperty(\"display\")?a.display:null,o.style.display=An(\"display\",a));else if(6===e.tag)e.stateNode.nodeValue=r?\"\":e.memoizedProps;else{if(13===e.tag&&null!==e.memoizedState&&null===e.memoizedState.dehydrated){(o=e.child.sibling).return=e,e=o;continue}if(null!==e.child){e.child.return=e,e=e.child;continue}}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}cu(t);break;case 19:cu(t);break;case 17:case 20:case 21:break;default:throw i(Error(163))}}function cu(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Zi),t.forEach((function(t){var r=Rl.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}var fu=\"function\"===typeof WeakMap?WeakMap:Map;function du(e,t,n){(n=uo(n,null)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Vu||(Vu=!0,Wu=r),eu(e,t)},n}function pu(e,t,n){(n=uo(n,null)).tag=3;var r=e.type.getDerivedStateFromError;if(\"function\"===typeof r){var a=t.value;n.payload=function(){return eu(e,t),r(a)}}var o=e.stateNode;return null!==o&&\"function\"===typeof o.componentDidCatch&&(n.callback=function(){\"function\"!==typeof r&&(null===qu?qu=new Set([this]):qu.add(this),eu(e,t));var n=t.stack;this.componentDidCatch(t.value,{componentStack:null!==n?n:\"\"})}),n}var bu=Math.ceil,hu=A.ReactCurrentDispatcher,mu=A.ReactCurrentOwner,yu=0,vu=8,gu=16,wu=32,xu=0,ku=1,Eu=2,_u=3,Tu=4,Su=5,Cu=6,Ou=yu,Pu=null,Nu=null,Ru=0,Mu=xu,Au=null,ju=1073741823,Fu=1073741823,Lu=null,Du=0,Iu=!1,zu=0,Uu=500,Bu=null,Vu=!1,Wu=null,qu=null,Hu=!1,$u=null,Ku=90,Qu=null,Gu=0,Yu=null,Xu=0;function Ju(){return(Ou&(gu|wu))!==yu?1073741821-(za()/10|0):0!==Xu?Xu:Xu=1073741821-(za()/10|0)}function Zu(e,t,n){if(0===(2&(t=t.mode)))return 1073741823;var r=Ua();if(0===(4&t))return 99===r?1073741823:1073741822;if((Ou&gu)!==yu)return Ru;if(null!==n)e=1073741821-25*(1+((1073741821-e+(0|n.timeoutMs||5e3)/10)/25|0));else switch(r){case 99:e=1073741823;break;case 98:e=1073741821-10*(1+((1073741821-e+15)/10|0));break;case 97:case 96:e=1073741821-25*(1+((1073741821-e+500)/25|0));break;case 95:e=2;break;default:throw i(Error(326))}return null!==Pu&&e===Ru&&--e,e}var el,tl=0;function nl(e,t){if(50<Gu)throw Gu=0,Yu=null,i(Error(185));if(null!==(e=rl(e,t))){var n=Ua();1073741823===t?(Ou&vu)!==yu&&(Ou&(gu|wu))===yu?ul(e):(ol(e),Ou===yu&&Ha()):ol(e),(4&Ou)===yu||98!==n&&99!==n||(null===Qu?Qu=new Map([[e,t]]):(void 0===(n=Qu.get(e))||n>t)&&Qu.set(e,t))}}function rl(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var r=e.return,a=null;if(null===r&&3===e.tag)a=e.stateNode;else for(;null!==r;){if(n=r.alternate,r.childExpirationTime<t&&(r.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===r.return&&3===r.tag){a=r.stateNode;break}r=r.return}return null!==a&&(Pu===a&&(yl(t),Mu===Tu&&ql(a,Ru)),Hl(a,t)),a}function al(e){var t=e.lastExpiredTime;return 0!==t?t:Wl(e,t=e.firstPendingTime)?(t=e.lastPingedTime)>(e=e.nextKnownPendingLevel)?t:e:t}function ol(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=qa(ul.bind(null,e));else{var t=al(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var r=Ju();if(1073741823===t?r=99:1===t||2===t?r=95:r=0>=(r=10*(1073741821-t)-10*(1073741821-r))?99:250>=r?98:5250>=r?97:95,null!==n){var a=e.callbackPriority;if(e.callbackExpirationTime===t&&a>=r)return;n!==Aa&&Ea(n)}e.callbackExpirationTime=t,e.callbackPriority=r,t=1073741823===t?qa(ul.bind(null,e)):Wa(r,il.bind(null,e),{timeout:10*(1073741821-t)-za()}),e.callbackNode=t}}}function il(e,t){if(Xu=0,t)return $l(e,t=Ju()),ol(e),null;var n=al(e);if(0!==n){if(t=e.callbackNode,(Ou&(gu|wu))!==yu)throw i(Error(327));if(Sl(),e===Pu&&n===Ru||pl(e,n),null!==Nu){var r=Ou;Ou|=gu;for(var a=hl();;)try{gl();break}catch(l){bl(e,l)}if(Ja(),Ou=r,hu.current=a,Mu===ku)throw t=Au,pl(e,n),ql(e,n),ol(e),t;if(null===Nu)switch(a=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,sl(e,n),r=Mu,Pu=null,r){case xu:case ku:throw i(Error(345));case Eu:if(2!==n){$l(e,2);break}El(e);break;case _u:if(ql(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=kl(a)),1073741823===ju&&10<(a=zu+Uu-za())){if(Iu){var o=e.lastPingedTime;if(0===o||o>=n){e.lastPingedTime=n,pl(e,n);break}}if(0!==(o=al(e))&&o!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}e.timeoutHandle=Zn(El.bind(null,e),a);break}El(e);break;case Tu:if(ql(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=kl(a)),Iu&&(0===(a=e.lastPingedTime)||a>=n)){e.lastPingedTime=n,pl(e,n);break}if(0!==(a=al(e))&&a!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}if(1073741823!==Fu?r=10*(1073741821-Fu)-za():1073741823===ju?r=0:(r=10*(1073741821-ju)-5e3,0>(r=(a=za())-r)&&(r=0),(n=10*(1073741821-n)-a)<(r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*bu(r/1960))-r)&&(r=n)),10<r){e.timeoutHandle=Zn(El.bind(null,e),r);break}El(e);break;case Su:if(1073741823!==ju&&null!==Lu){o=ju;var u=Lu;if(0>=(r=0|u.busyMinDurationMs)?r=0:(a=0|u.busyDelayMs,r=(o=za()-(10*(1073741821-o)-(0|u.timeoutMs||5e3)))<=a?0:a+r-o),10<r){ql(e,n),e.timeoutHandle=Zn(El.bind(null,e),r);break}}El(e);break;case Cu:ql(e,n);break;default:throw i(Error(329))}if(ol(e),e.callbackNode===t)return il.bind(null,e)}}return null}function ul(e){var t=e.lastExpiredTime;if(t=0!==t?t:1073741823,e.finishedExpirationTime===t)El(e);else{if((Ou&(gu|wu))!==yu)throw i(Error(327));if(Sl(),e===Pu&&t===Ru||pl(e,t),null!==Nu){var n=Ou;Ou|=gu;for(var r=hl();;)try{vl();break}catch(a){bl(e,a)}if(Ja(),Ou=n,hu.current=r,Mu===ku)throw n=Au,pl(e,t),ql(e,t),ol(e),n;if(null!==Nu)throw i(Error(261));e.finishedWork=e.current.alternate,e.finishedExpirationTime=t,sl(e,t),Mu===Cu?ql(e,t):(Pu=null,El(e)),ol(e)}}return null}function ll(){(Ou&(1|gu|wu))===yu&&(function(){if(null!==Qu){var e=Qu;Qu=null,e.forEach((function(e,t){$l(t,e),ol(t)})),Ha()}}(),Sl())}function sl(e,t){var n=e.firstBatch;null!==n&&n._defer&&n._expirationTime>=t&&(Wa(97,(function(){return n._onComplete(),null})),Mu=Cu)}function cl(e,t){var n=Ou;Ou|=1;try{return e(t)}finally{(Ou=n)===yu&&Ha()}}function fl(e,t,n,r){var a=Ou;Ou|=4;try{return Va(98,e.bind(null,t,n,r))}finally{(Ou=a)===yu&&Ha()}}function dl(e,t){var n=Ou;Ou&=-2,Ou|=vu;try{return e(t)}finally{(Ou=n)===yu&&Ha()}}function pl(e,t){e.finishedWork=null,e.finishedExpirationTime=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,er(n)),null!==Nu)for(n=Nu.return;null!==n;){var r=n;switch(r.tag){case 1:var a=r.type.childContextTypes;null!==a&&void 0!==a&&ha();break;case 3:Do(),ma();break;case 5:zo(r);break;case 4:Do();break;case 13:case 19:ua(Uo);break;case 10:eo(r)}n=n.return}Pu=e,Nu=Dl(e.current,null),Ru=t,Mu=xu,Au=null,Fu=ju=1073741823,Lu=null,Du=0,Iu=!1}function bl(e,t){for(;;){try{if(Ja(),ii(),null===Nu||null===Nu.return)return Mu=ku,Au=t,null;e:{var n=e,r=Nu.return,a=Nu,o=t;if(t=Ru,a.effectTag|=2048,a.firstEffect=a.lastEffect=null,null!==o&&\"object\"===typeof o&&\"function\"===typeof o.then){var i=o,u=0!==(1&Uo.current),l=r;do{var s;if(s=13===l.tag){var c=l.memoizedState;if(null!==c)s=null!==c.dehydrated;else{var f=l.memoizedProps;s=void 0!==f.fallback&&(!0!==f.unstable_avoidThisFallback||!u)}}if(s){var d=l.updateQueue;if(null===d){var p=new Set;p.add(i),l.updateQueue=p}else d.add(i);if(0===(2&l.mode)){if(l.effectTag|=64,a.effectTag&=-2981,1===a.tag)if(null===a.alternate)a.tag=17;else{var b=uo(1073741823,null);b.tag=2,so(a,b)}a.expirationTime=1073741823;break e}o=void 0,a=t;var h=n.pingCache;if(null===h?(h=n.pingCache=new fu,o=new Set,h.set(i,o)):void 0===(o=h.get(i))&&(o=new Set,h.set(i,o)),!o.has(a)){o.add(a);var m=Nl.bind(null,n,i,a);i.then(m,m)}l.effectTag|=4096,l.expirationTime=t;break e}l=l.return}while(null!==l);o=Error((X(a.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+J(a))}Mu!==Su&&(Mu=Eu),o=Ji(o,a),l=r;do{switch(l.tag){case 3:i=o,l.effectTag|=4096,l.expirationTime=t,co(l,du(l,i,t));break e;case 1:i=o;var y=l.type,v=l.stateNode;if((64&l.effectTag)===yt&&(\"function\"===typeof y.getDerivedStateFromError||null!==v&&\"function\"===typeof v.componentDidCatch&&(null===qu||!qu.has(v)))){l.effectTag|=4096,l.expirationTime=t,co(l,pu(l,i,t));break e}}l=l.return}while(null!==l)}Nu=xl(Nu)}catch(g){t=g;continue}break}}function hl(){var e=hu.current;return hu.current=yi,null===e?yi:e}function ml(e,t){e<ju&&2<e&&(ju=e),null!==t&&e<Fu&&2<e&&(Fu=e,Lu=t)}function yl(e){e>Du&&(Du=e)}function vl(){for(;null!==Nu;)Nu=wl(Nu)}function gl(){for(;null!==Nu&&!_a();)Nu=wl(Nu)}function wl(e){var t=el(e.alternate,e,Ru);return e.memoizedProps=e.pendingProps,null===t&&(t=xl(e)),mu.current=null,t}function xl(e){Nu=e;do{var t=Nu.alternate;if(e=Nu.return,(2048&Nu.effectTag)===yt){e:{var n=t,r=Ru,o=(t=Nu).pendingProps;switch(t.tag){case 2:case 16:break;case 15:case 0:break;case 1:ba(t.type)&&ha();break;case 3:Do(),ma(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(null===n||null===n.child)&&Ci(t)&&Gi(t),Bi(t);break;case 5:zo(t),r=Fo(jo.current);var u=t.type;if(null!==n&&null!=t.stateNode)Vi(n,t,u,o,r),n.ref!==t.ref&&(t.effectTag|=128);else if(o){var l=Fo(Mo.current);if(Ci(t)){u=void 0,n=(o=t).stateNode;var s=o.type,c=o.memoizedProps;switch(n[ar]=o,n[or]=c,s){case\"iframe\":case\"object\":case\"embed\":wn(\"load\",n);break;case\"video\":case\"audio\":for(var f=0;f<Ze.length;f++)wn(Ze[f],n);break;case\"source\":wn(\"error\",n);break;case\"img\":case\"image\":case\"link\":wn(\"error\",n),wn(\"load\",n);break;case\"form\":wn(\"reset\",n),wn(\"submit\",n);break;case\"details\":wn(\"toggle\",n);break;case\"input\":Ce(n,c),wn(\"invalid\",n),In(r,\"onChange\");break;case\"select\":n._wrapperState={wasMultiple:!!c.multiple},wn(\"invalid\",n),In(r,\"onChange\");break;case\"textarea\":Fe(n,c),wn(\"invalid\",n),In(r,\"onChange\")}for(u in Ln(s,c),f=null,c)c.hasOwnProperty(u)&&(l=c[u],\"children\"===u?\"string\"===typeof l?n.textContent!==l&&(f=[\"children\",l]):\"number\"===typeof l&&n.textContent!==\"\"+l&&(f=[\"children\",\"\"+l]):p.hasOwnProperty(u)&&null!=l&&In(r,u));switch(s){case\"input\":_e(n),Ne(n,c,!0);break;case\"textarea\":_e(n),De(n);break;case\"select\":case\"option\":break;default:\"function\"===typeof c.onClick&&(n.onclick=zn)}r=f,o.updateQueue=r,null!==r&&Gi(t)}else{c=u,n=o,s=t,f=9===r.nodeType?r:r.ownerDocument,l===Ie.html&&(l=ze(c)),l===Ie.html?\"script\"===c?((c=f.createElement(\"div\")).innerHTML=\"<script><\\/script>\",f=c.removeChild(c.firstChild)):\"string\"===typeof n.is?f=f.createElement(c,{is:n.is}):(f=f.createElement(c),\"select\"===c&&(c=f,n.multiple?c.multiple=!0:n.size&&(c.size=n.size))):f=f.createElementNS(l,c),(c=f)[ar]=s,c[or]=n,Ui(n=c,t,!1,!1),t.stateNode=n,l=r;var d=Dn(u,o);switch(u){case\"iframe\":case\"object\":case\"embed\":wn(\"load\",n),r=o;break;case\"video\":case\"audio\":for(r=0;r<Ze.length;r++)wn(Ze[r],n);r=o;break;case\"source\":wn(\"error\",n),r=o;break;case\"img\":case\"image\":case\"link\":wn(\"error\",n),wn(\"load\",n),r=o;break;case\"form\":wn(\"reset\",n),wn(\"submit\",n),r=o;break;case\"details\":wn(\"toggle\",n),r=o;break;case\"input\":Ce(n,o),r=Se(n,o),wn(\"invalid\",n),In(l,\"onChange\");break;case\"option\":r=Me(n,o);break;case\"select\":n._wrapperState={wasMultiple:!!o.multiple},r=a({},o,{value:void 0}),wn(\"invalid\",n),In(l,\"onChange\");break;case\"textarea\":Fe(n,o),r=je(n,o),wn(\"invalid\",n),In(l,\"onChange\");break;default:r=o}Ln(u,r),s=void 0,c=u,f=n;var b=r;for(s in b)if(b.hasOwnProperty(s)){var h=b[s];\"style\"===s?jn(f,h):\"dangerouslySetInnerHTML\"===s?null!=(h=h?h.__html:void 0)&&Ve(f,h):\"children\"===s?\"string\"===typeof h?(\"textarea\"!==c||\"\"!==h)&&We(f,h):\"number\"===typeof h&&We(f,\"\"+h):\"suppressContentEditableWarning\"!==s&&\"suppressHydrationWarning\"!==s&&\"autoFocus\"!==s&&(p.hasOwnProperty(s)?null!=h&&In(l,s):null!=h&&ke(f,s,h,d))}switch(u){case\"input\":_e(n),Ne(n,o,!1);break;case\"textarea\":_e(n),De(n);break;case\"option\":null!=o.value&&n.setAttribute(\"value\",\"\"+xe(o.value));break;case\"select\":r=n,n=o,r.multiple=!!n.multiple,null!=(s=n.value)?Ae(r,!!n.multiple,s,!1):null!=n.defaultValue&&Ae(r,!!n.multiple,n.defaultValue,!0);break;default:\"function\"===typeof r.onClick&&(n.onclick=zn)}Xn(u,o)&&Gi(t)}null!==t.ref&&(t.effectTag|=128)}else if(null===t.stateNode)throw i(Error(166));break;case 6:if(n&&null!=t.stateNode)Wi(n,t,n.memoizedProps,o);else{if(\"string\"!==typeof o&&null===t.stateNode)throw i(Error(166));u=Fo(jo.current),Fo(Mo.current),Ci(t)?(r=t.stateNode,o=t.memoizedProps,r[ar]=t,r.nodeValue!==o&&Gi(t)):(r=t,(o=(9===u.nodeType?u:u.ownerDocument).createTextNode(o))[ar]=t,r.stateNode=o)}break;case 11:break;case 13:if(ua(Uo),o=t.memoizedState,(64&t.effectTag)!==yt){t.expirationTime=r;break e}r=null!==o,o=!1,null===n?Ci(t):(o=null!==(u=n.memoizedState),r||null===u||null!==(u=n.child.sibling)&&(null!==(s=t.firstEffect)?(t.firstEffect=u,u.nextEffect=s):(t.firstEffect=t.lastEffect=u,u.nextEffect=null),u.effectTag=8)),r&&!o&&0!==(2&t.mode)&&(null===n&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!==(1&Uo.current)?Mu===xu&&(Mu=_u):(Mu!==xu&&Mu!==_u||(Mu=Tu),0!==Du&&null!==Pu&&(ql(Pu,Ru),Hl(Pu,Du)))),(r||o)&&(t.effectTag|=4);break;case 7:case 8:case 12:break;case 4:Do(),Bi(t);break;case 10:eo(t);break;case 9:case 14:break;case 17:ba(t.type)&&ha();break;case 19:if(ua(Uo),null===(o=t.memoizedState))break;if(u=(64&t.effectTag)!==yt,null===(s=o.rendering)){if(u)Yi(o,!1);else if(Mu!==xu||null!==n&&(64&n.effectTag)!==yt)for(n=t.child;null!==n;){if(null!==(s=Bo(n))){for(t.effectTag|=64,Yi(o,!1),null!==(o=s.updateQueue)&&(t.updateQueue=o,t.effectTag|=4),t.firstEffect=t.lastEffect=null,o=t.child;null!==o;)n=r,(u=o).effectTag&=vt,u.nextEffect=null,u.firstEffect=null,u.lastEffect=null,null===(s=u.alternate)?(u.childExpirationTime=0,u.expirationTime=n,u.child=null,u.memoizedProps=null,u.memoizedState=null,u.updateQueue=null,u.dependencies=null):(u.childExpirationTime=s.childExpirationTime,u.expirationTime=s.expirationTime,u.child=s.child,u.memoizedProps=s.memoizedProps,u.memoizedState=s.memoizedState,u.updateQueue=s.updateQueue,n=s.dependencies,u.dependencies=null===n?null:{expirationTime:n.expirationTime,firstContext:n.firstContext,responders:n.responders}),o=o.sibling;la(Uo,1&Uo.current|2),t=t.child;break e}n=n.sibling}}else{if(!u)if(null!==(n=Bo(s))){if(t.effectTag|=64,u=!0,Yi(o,!0),null===o.tail&&\"hidden\"===o.tailMode){null!==(r=n.updateQueue)&&(t.updateQueue=r,t.effectTag|=4),null!==(t=t.lastEffect=o.lastEffect)&&(t.nextEffect=null);break}}else za()>o.tailExpiration&&1<r&&(t.effectTag|=64,u=!0,Yi(o,!1),t.expirationTime=t.childExpirationTime=r-1);o.isBackwards?(s.sibling=t.child,t.child=s):(null!==(r=o.last)?r.sibling=s:t.child=s,o.last=s)}if(null!==o.tail){0===o.tailExpiration&&(o.tailExpiration=za()+500),r=o.tail,o.rendering=r,o.tail=r.sibling,o.lastEffect=t.lastEffect,r.sibling=null,o=Uo.current,la(Uo,o=u?1&o|2:1&o),t=r;break e}break;case 20:case 21:break;default:throw i(Error(156),t.tag)}t=null}if(r=Nu,1===Ru||1!==r.childExpirationTime){for(o=0,u=r.child;null!==u;)(n=u.expirationTime)>o&&(o=n),(s=u.childExpirationTime)>o&&(o=s),u=u.sibling;r.childExpirationTime=o}if(null!==t)return t;null!==e&&(2048&e.effectTag)===yt&&(null===e.firstEffect&&(e.firstEffect=Nu.firstEffect),null!==Nu.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=Nu.firstEffect),e.lastEffect=Nu.lastEffect),1<Nu.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=Nu:e.firstEffect=Nu,e.lastEffect=Nu))}else{if(null!==(t=Xi(Nu)))return t.effectTag&=2047,t;null!==e&&(e.firstEffect=e.lastEffect=null,e.effectTag|=2048)}if(null!==(t=Nu.sibling))return t;Nu=e}while(null!==Nu);return Mu===xu&&(Mu=Su),null}function kl(e){var t=e.expirationTime;return t>(e=e.childExpirationTime)?t:e}function El(e){var t=Ua();return Va(99,_l.bind(null,e,t)),null}function _l(e,t){if(Sl(),(Ou&(gu|wu))!==yu)throw i(Error(327));var n=e.finishedWork,r=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw i(Error(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var a=kl(n);if(e.firstPendingTime=a,r<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:r<=e.firstSuspendedTime&&(e.firstSuspendedTime=r-1),r<=e.lastPingedTime&&(e.lastPingedTime=0),r<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===Pu&&(Nu=Pu=null,Ru=0),1<n.effectTag?null!==n.lastEffect?(n.lastEffect.nextEffect=n,a=n.firstEffect):a=n:a=n.firstEffect,null!==a){var o=Ou;Ou|=wu,mu.current=null,Gn=gn;var u=Wn();if(qn(u)){if(\"selectionStart\"in u)var l={start:u.selectionStart,end:u.selectionEnd};else e:{var s=(l=(l=u.ownerDocument)&&l.defaultView||window).getSelection&&l.getSelection();if(s&&0!==s.rangeCount){l=s.anchorNode;var c=s.anchorOffset,f=s.focusNode;s=s.focusOffset;try{l.nodeType,f.nodeType}catch(L){l=null;break e}var d=0,p=-1,b=-1,h=0,m=0,y=u,v=null;t:for(;;){for(var g;y!==l||0!==c&&3!==y.nodeType||(p=d+c),y!==f||0!==s&&3!==y.nodeType||(b=d+s),3===y.nodeType&&(d+=y.nodeValue.length),null!==(g=y.firstChild);)v=y,y=g;for(;;){if(y===u)break t;if(v===l&&++h===c&&(p=d),v===f&&++m===s&&(b=d),null!==(g=y.nextSibling))break;v=(y=v).parentNode}y=g}l=-1===p||-1===b?null:{start:p,end:b}}else l=null}l=l||{start:0,end:0}}else l=null;Yn={focusedElem:u,selectionRange:l},gn=!1,Bu=a;do{try{Tl()}catch(L){if(null===Bu)throw i(Error(330));Pl(Bu,L),Bu=Bu.nextEffect}}while(null!==Bu);Bu=a;do{try{for(u=e,l=t;null!==Bu;){var w=Bu.effectTag;if(16&w&&We(Bu.stateNode,\"\"),128&w){var x=Bu.alternate;if(null!==x){var k=x.ref;null!==k&&(\"function\"===typeof k?k(null):k.current=null)}}switch(w&(12|vt|gt)){case vt:uu(Bu),Bu.effectTag&=~vt;break;case 6:uu(Bu),Bu.effectTag&=~vt,su(Bu.alternate,Bu);break;case gt:Bu.effectTag&=~gt;break;case 1028:Bu.effectTag&=~gt,su(Bu.alternate,Bu);break;case 4:su(Bu.alternate,Bu);break;case 8:lu(u,c=Bu,l),ou(c)}Bu=Bu.nextEffect}}catch(L){if(null===Bu)throw i(Error(330));Pl(Bu,L),Bu=Bu.nextEffect}}while(null!==Bu);if(k=Yn,x=Wn(),w=k.focusedElem,l=k.selectionRange,x!==w&&w&&w.ownerDocument&&function e(t,n){return!(!t||!n)&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):\"contains\"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(w.ownerDocument.documentElement,w)){null!==l&&qn(w)&&(x=l.start,void 0===(k=l.end)&&(k=x),\"selectionStart\"in w?(w.selectionStart=x,w.selectionEnd=Math.min(k,w.value.length)):(k=(x=w.ownerDocument||document)&&x.defaultView||window).getSelection&&(k=k.getSelection(),c=w.textContent.length,u=Math.min(l.start,c),l=void 0===l.end?u:Math.min(l.end,c),!k.extend&&u>l&&(c=l,l=u,u=c),c=Vn(w,u),f=Vn(w,l),c&&f&&(1!==k.rangeCount||k.anchorNode!==c.node||k.anchorOffset!==c.offset||k.focusNode!==f.node||k.focusOffset!==f.offset)&&((x=x.createRange()).setStart(c.node,c.offset),k.removeAllRanges(),u>l?(k.addRange(x),k.extend(f.node,f.offset)):(x.setEnd(f.node,f.offset),k.addRange(x))))),x=[];for(k=w;k=k.parentNode;)1===k.nodeType&&x.push({element:k,left:k.scrollLeft,top:k.scrollTop});for(\"function\"===typeof w.focus&&w.focus(),w=0;w<x.length;w++)(k=x[w]).element.scrollLeft=k.left,k.element.scrollTop=k.top}Yn=null,gn=!!Gn,Gn=null,e.current=n,Bu=a;do{try{for(w=r;null!==Bu;){var E=Bu.effectTag;if(36&E){var _=Bu.alternate;switch(k=w,(x=Bu).tag){case 0:case 11:case 15:ru(16,32,x);break;case 1:var T=x.stateNode;if(4&x.effectTag)if(null===_)T.componentDidMount();else{var S=x.elementType===x.type?_.memoizedProps:Ka(x.type,_.memoizedProps);T.componentDidUpdate(S,_.memoizedState,T.__reactInternalSnapshotBeforeUpdate)}var C=x.updateQueue;null!==C&&ho(0,C,T);break;case 3:var O=x.updateQueue;if(null!==O){if(u=null,null!==x.child)switch(x.child.tag){case 5:u=x.child.stateNode;break;case 1:u=x.child.stateNode}ho(0,O,u)}break;case 5:var P=x.stateNode;null===_&&4&x.effectTag&&(k=P,Xn(x.type,x.memoizedProps)&&k.focus());break;case 6:case 4:case 12:break;case 13:if(null===x.memoizedState){var N=x.alternate;if(null!==N){var R=N.memoizedState;if(null!==R){var M=R.dehydrated;null!==M&&mt(M)}}}break;case 19:case 17:case 20:case 21:break;default:throw i(Error(163))}}if(128&E){var A=(x=Bu).ref;if(null!==A){var j=x.stateNode;switch(x.tag){case 5:var F=j;break;default:F=j}\"function\"===typeof A?A(F):A.current=F}}Bu=Bu.nextEffect}}catch(L){if(null===Bu)throw i(Error(330));Pl(Bu,L),Bu=Bu.nextEffect}}while(null!==Bu);Bu=null,ja(),Ou=o}else e.current=n;if(Hu)Hu=!1,$u=e,Ku=t;else for(Bu=a;null!==Bu;)t=Bu.nextEffect,Bu.nextEffect=null,Bu=t;if(0===(t=e.firstPendingTime)&&(qu=null),1073741823===t?e===Yu?Gu++:(Gu=0,Yu=e):Gu=0,\"function\"===typeof Ml&&Ml(n.stateNode,r),ol(e),Vu)throw Vu=!1,e=Wu,Wu=null,e;return(Ou&vu)!==yu?null:(Ha(),null)}function Tl(){for(;null!==Bu;){var e=Bu.effectTag;(256&e)!==yt&&nu(Bu.alternate,Bu),(512&e)===yt||Hu||(Hu=!0,Wa(97,(function(){return Sl(),null}))),Bu=Bu.nextEffect}}function Sl(){if(90!==Ku){var e=97<Ku?97:Ku;return Ku=90,Va(e,Cl)}}function Cl(){if(null===$u)return!1;var e=$u;if($u=null,(Ou&(gu|wu))!==yu)throw i(Error(331));var t=Ou;for(Ou|=wu,e=e.current.firstEffect;null!==e;){try{var n=e;if((512&n.effectTag)!==yt)switch(n.tag){case 0:case 11:case 15:ru(128,0,n),ru(0,64,n)}}catch(r){if(null===e)throw i(Error(330));Pl(e,r)}n=e.nextEffect,e.nextEffect=null,e=n}return Ou=t,Ha(),!0}function Ol(e,t,n){so(e,t=du(e,t=Ji(n,t),1073741823)),null!==(e=rl(e,1073741823))&&ol(e)}function Pl(e,t){if(3===e.tag)Ol(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Ol(n,e,t);break}if(1===n.tag){var r=n.stateNode;if(\"function\"===typeof n.type.getDerivedStateFromError||\"function\"===typeof r.componentDidCatch&&(null===qu||!qu.has(r))){so(n,e=pu(n,e=Ji(t,e),1073741823)),null!==(n=rl(n,1073741823))&&ol(n);break}}n=n.return}}function Nl(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),Pu===e&&Ru===n?Mu===Tu||Mu===_u&&1073741823===ju&&za()-zu<Uu?pl(e,Ru):Iu=!0:Wl(e,n)&&(0!==(t=e.lastPingedTime)&&t<n||(e.lastPingedTime=n,e.finishedExpirationTime===n&&(e.finishedExpirationTime=0,e.finishedWork=null),ol(e)))}function Rl(e,t){var n=e.stateNode;null!==n&&n.delete(t),1===(t=1)&&(t=Zu(t=Ju(),e,null)),null!==(e=rl(e,t))&&ol(e)}el=function(e,t,n){var r=t.expirationTime;if(null!==e){var a=t.pendingProps;if(e.memoizedProps!==a||fa.current)Ni=!0;else{if(r<n){switch(Ni=!1,t.tag){case 3:zi(t),Oi();break;case 5:if(Io(t),4&t.mode&&1!==n&&a.hidden)return t.expirationTime=t.childExpirationTime=1,null;break;case 1:ba(t.type)&&ga(t);break;case 4:Lo(t,t.stateNode.containerInfo);break;case 10:Za(t,t.memoizedProps.value);break;case 13:if(null!==t.memoizedState)return 0!==(r=t.child.childExpirationTime)&&r>=n?Hi(e,t,n):(la(Uo,1&Uo.current),null!==(t=Qi(e,t,n))?t.sibling:null);la(Uo,1&Uo.current);break;case 19:if(r=t.childExpirationTime>=n,(64&e.effectTag)!==yt){if(r)return Ki(e,t,n);t.effectTag|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null),la(Uo,Uo.current),!r)return null}return Qi(e,t,n)}Ni=!1}}else Ni=!1;switch(t.expirationTime=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=vt),e=t.pendingProps,a=pa(t,ca.current),no(t,n),a=oi(null,t,r,e,a,n),t.effectTag|=1,\"object\"===typeof a&&null!==a&&\"function\"===typeof a.render&&void 0===a.$$typeof){if(t.tag=1,ii(),ba(r)){var o=!0;ga(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null;var u=r.getDerivedStateFromProps;\"function\"===typeof u&&go(t,r,u,e),a.updater=wo,t.stateNode=a,a._reactInternalFiber=t,_o(t,r,e,n),t=Ii(null,t,r,!0,o,n)}else t.tag=0,Ri(null,t,a,n),t=t.child;return t;case 16:if(a=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=vt),e=t.pendingProps,function(e){if(-1===e._status){e._status=0;var t=e._ctor;t=t(),e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}}(a),1!==a._status)throw a._result;switch(a=a._result,t.type=a,o=t.tag=function(e){if(\"function\"===typeof e)return Ll(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===q)return 11;if(e===K)return 14}return 2}(a),e=Ka(a,e),o){case 0:t=Li(null,t,a,e,n);break;case 1:t=Di(null,t,a,e,n);break;case 11:t=Mi(null,t,a,e,n);break;case 14:t=Ai(null,t,a,Ka(a.type,e),r,n);break;default:throw i(Error(306),a,\"\")}return t;case 0:return r=t.type,a=t.pendingProps,Li(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 1:return r=t.type,a=t.pendingProps,Di(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 3:if(zi(t),null===(r=t.updateQueue))throw i(Error(282));if(a=null!==(a=t.memoizedState)?a.element:null,bo(t,r,t.pendingProps,null,n),(r=t.memoizedState.element)===a)Oi(),t=Qi(e,t,n);else{if((a=t.stateNode.hydrate)&&(xi=tr(t.stateNode.containerInfo.firstChild),wi=t,a=ki=!0),a)for(n=No(t,null,r,n),t.child=n;n;)n.effectTag=n.effectTag&~vt|gt,n=n.sibling;else Ri(e,t,r,n),Oi();t=t.child}return t;case 5:return Io(t),null===e&&Ti(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,u=a.children,Jn(r,a)?u=null:null!==o&&Jn(r,o)&&(t.effectTag|=16),Fi(e,t),4&t.mode&&1!==n&&a.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(Ri(e,t,u,n),t=t.child),t;case 6:return null===e&&Ti(t),null;case 13:return Hi(e,t,n);case 4:return Lo(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Po(t,null,r,n):Ri(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,Mi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 7:return Ri(e,t,t.pendingProps,n),t.child;case 8:case 12:return Ri(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,u=t.memoizedProps,Za(t,o=a.value),null!==u){var l=u.value;if(0===(o=Qr(l,o)?0:0|(\"function\"===typeof r._calculateChangedBits?r._calculateChangedBits(l,o):1073741823))){if(u.children===a.children&&!fa.current){t=Qi(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var s=l.dependencies;if(null!==s){u=l.child;for(var c=s.firstContext;null!==c;){if(c.context===r&&0!==(c.observedBits&o)){1===l.tag&&((c=uo(n,null)).tag=2,so(l,c)),l.expirationTime<n&&(l.expirationTime=n),null!==(c=l.alternate)&&c.expirationTime<n&&(c.expirationTime=n),to(l.return,n),s.expirationTime<n&&(s.expirationTime=n);break}c=c.next}}else u=10===l.tag&&l.type===t.type?null:l.child;if(null!==u)u.return=l;else for(u=l;null!==u;){if(u===t){u=null;break}if(null!==(l=u.sibling)){l.return=u.return,u=l;break}u=u.return}l=u}}Ri(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,no(t,n),r=r(a=ro(a,o.unstable_observedBits)),t.effectTag|=1,Ri(e,t,r,n),t.child;case 14:return o=Ka(a=t.type,t.pendingProps),Ai(e,t,a,o=Ka(a.type,o),r,n);case 15:return ji(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Ka(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=vt),t.tag=1,ba(r)?(e=!0,ga(t)):e=!1,no(t,n),ko(t,r,a),_o(t,r,a,n),Ii(null,t,r,!0,e,n);case 19:return Ki(e,t,n)}throw i(Error(156),t.tag)};var Ml=null,Al=null;function jl(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=yt,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Fl(e,t,n,r){return new jl(e,t,n,r)}function Ll(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Dl(e,t){var n=e.alternate;return null===n?((n=Fl(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=yt,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{expirationTime:t.expirationTime,firstContext:t.firstContext,responders:t.responders},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Il(e,t,n,r,a,o){var u=2;if(r=e,\"function\"===typeof e)Ll(e)&&(u=1);else if(\"string\"===typeof e)u=5;else e:switch(e){case I:return zl(n.children,a,o,t);case W:u=8,a|=7;break;case z:u=8,a|=1;break;case U:return(e=Fl(12,n,t,8|a)).elementType=U,e.type=U,e.expirationTime=o,e;case H:return(e=Fl(13,n,t,a)).type=H,e.elementType=H,e.expirationTime=o,e;case $:return(e=Fl(19,n,t,a)).elementType=$,e.expirationTime=o,e;default:if(\"object\"===typeof e&&null!==e)switch(e.$$typeof){case B:u=10;break e;case V:u=9;break e;case q:u=11;break e;case K:u=14;break e;case Q:u=16,r=null;break e}throw i(Error(130),null==e?e:typeof e,\"\")}return(t=Fl(u,n,t,a)).elementType=e,t.type=r,t.expirationTime=o,t}function zl(e,t,n,r){return(e=Fl(7,e,r,t)).expirationTime=n,e}function Ul(e,t,n){return(e=Fl(6,e,null,t)).expirationTime=n,e}function Bl(e,t,n){return(t=Fl(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Vl(e,t,n){this.tag=t,this.current=null,this.containerInfo=e,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=this.firstBatch=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function Wl(e,t){var n=e.firstSuspendedTime;return e=e.lastSuspendedTime,0!==n&&n>=t&&e<=t}function ql(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;n<t&&(e.firstSuspendedTime=t),(r>t||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Hl(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function $l(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function Kl(e,t,n,r,a,o){var u=t.current;e:if(n){t:{if(wt(n=n._reactInternalFiber)!==n||1!==n.tag)throw i(Error(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(ba(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw i(Error(171))}if(1===n.tag){var s=n.type;if(ba(s)){n=va(n,s,l);break e}}n=l}else n=sa;return null===t.context?t.context=n:t.pendingContext=n,t=o,(a=uo(r,a)).payload={element:e},null!==(t=void 0===t?null:t)&&(a.callback=t),so(u,a),nl(u,r),r}function Ql(e,t,n,r){var a=t.current,o=Ju(),i=yo.suspense;return Kl(e,t,n,a=Zu(o,a,i),i,r)}function Gl(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Yl(e){var t=1073741821-25*(1+((1073741821-Ju()+500)/25|0));t<=tl&&--t,this._expirationTime=tl=t,this._root=e,this._callbacks=this._next=null,this._hasChildren=this._didComplete=!1,this._children=null,this._defer=!0}function Xl(){this._callbacks=null,this._didCommit=!1,this._onCommit=this._onCommit.bind(this)}function Jl(e,t,n){var r=new Vl(e,t,n=null!=n&&!0===n.hydrate),a=Fl(3,null,null,2===t?7:1===t?3:0);return r.current=a,a.stateNode=r,e[ir]=r.current,n&&0!==t&&function(e){var t=Pn(e);ut.forEach((function(n){Nn(n,e,t)})),lt.forEach((function(n){Nn(n,e,t)}))}(9===e.nodeType?e:e.ownerDocument),r}function Zl(e,t,n){this._internalRoot=Jl(e,t,n)}function es(e,t){this._internalRoot=Jl(e,2,t)}function ts(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||\" react-mount-point-unstable \"!==e.nodeValue))}function ns(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if(\"function\"===typeof a){var u=a;a=function(){var e=Gl(i);u.call(e)}}Ql(t,i,e,a)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute(\"data-reactroot\"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new Zl(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,\"function\"===typeof a){var l=a;a=function(){var e=Gl(i);l.call(e)}}dl((function(){Ql(t,i,e,a)}))}return Gl(i)}function rs(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ts(t))throw i(Error(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:D,key:null==r?null:\"\"+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ee=function(e,t,n){switch(t){case\"input\":if(Pe(e,n),t=n.name,\"radio\"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+t)+'][type=\"radio\"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=cr(r);if(!a)throw i(Error(90));Te(r),Pe(r,a)}}}break;case\"textarea\":Le(e,n);break;case\"select\":null!=(t=n.value)&&Ae(e,!!n.multiple,t,!1)}},Yl.prototype.render=function(e){if(!this._defer)throw i(Error(250));this._hasChildren=!0,this._children=e;var t=this._root._internalRoot,n=this._expirationTime,r=new Xl;return Kl(e,t,null,n,null,r._onCommit),r},Yl.prototype.then=function(e){if(this._didComplete)e();else{var t=this._callbacks;null===t&&(t=this._callbacks=[]),t.push(e)}},Yl.prototype.commit=function(){var e=this._root._internalRoot,t=e.firstBatch;if(!this._defer||null===t)throw i(Error(251));if(this._hasChildren){var n=this._expirationTime;if(t!==this){this._hasChildren&&(n=this._expirationTime=t._expirationTime,this.render(this._children));for(var r=null,a=t;a!==this;)r=a,a=a._next;if(null===r)throw i(Error(251));r._next=a._next,this._next=t,e.firstBatch=this}if(this._defer=!1,t=n,(Ou&(gu|wu))!==yu)throw i(Error(253));$l(e,t),ol(e),Ha(),t=this._next,this._next=null,null!==(t=e.firstBatch=t)&&t._hasChildren&&t.render(t._children)}else this._next=null,this._defer=!1},Yl.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var e=this._callbacks;if(null!==e)for(var t=0;t<e.length;t++)(0,e[t])()}},Xl.prototype.then=function(e){if(this._didCommit)e();else{var t=this._callbacks;null===t&&(t=this._callbacks=[]),t.push(e)}},Xl.prototype._onCommit=function(){if(!this._didCommit){this._didCommit=!0;var e=this._callbacks;if(null!==e)for(var t=0;t<e.length;t++){var n=e[t];if(\"function\"!==typeof n)throw i(Error(191),n);n()}}},es.prototype.render=Zl.prototype.render=function(e,t){var n=this._internalRoot,r=new Xl;return null!==(t=void 0===t?null:t)&&r.then(t),Ql(e,n,null,r._onCommit),r},es.prototype.unmount=Zl.prototype.unmount=function(e){var t=this._internalRoot,n=new Xl;return null!==(e=void 0===e?null:e)&&n.then(e),Ql(null,t,null,n._onCommit),n},es.prototype.createBatch=function(){var e=new Yl(this),t=e._expirationTime,n=this._internalRoot,r=n.firstBatch;if(null===r)n.firstBatch=e,e._next=null;else{for(n=null;null!==r&&r._expirationTime>=t;)n=r,r=r._next;e._next=r,null!==n&&(n._next=e)}return e},ie=cl,ue=fl,le=ll,se=function(e,t){var n=Ou;Ou|=2;try{return e(t)}finally{(Ou=n)===yu&&Ha()}};var as={createPortal:rs,findDOMNode:function(e){if(null==e)e=null;else if(1!==e.nodeType){var t=e._reactInternalFiber;if(void 0===t){if(\"function\"===typeof e.render)throw i(Error(188));throw i(Error(268),Object.keys(e))}e=null===(e=kt(t))?null:e.stateNode}return e},hydrate:function(e,t,n){if(!ts(t))throw i(Error(200));return ns(null,e,t,!0,n)},render:function(e,t,n){if(!ts(t))throw i(Error(200));return ns(null,e,t,!1,n)},unstable_renderSubtreeIntoContainer:function(e,t,n,r){if(!ts(n))throw i(Error(200));if(null==e||void 0===e._reactInternalFiber)throw i(Error(38));return ns(e,t,n,!1,r)},unmountComponentAtNode:function(e){if(!ts(e))throw i(Error(40));return!!e._reactRootContainer&&(dl((function(){ns(null,null,e,!1,(function(){e._reactRootContainer=null}))})),!0)},unstable_createPortal:function(){return rs.apply(void 0,arguments)},unstable_batchedUpdates:cl,unstable_interactiveUpdates:function(e,t,n,r){return ll(),fl(e,t,n,r)},unstable_discreteUpdates:fl,unstable_flushDiscreteUpdates:ll,flushSync:function(e,t){if((Ou&(gu|wu))!==yu)throw i(Error(187));var n=Ou;Ou|=1;try{return Va(99,e.bind(null,t))}finally{Ou=n,Ha()}},unstable_createRoot:function(e,t){if(!ts(e))throw i(Error(299),\"unstable_createRoot\");return new es(e,t)},unstable_createSyncRoot:function(e,t){if(!ts(e))throw i(Error(299),\"unstable_createRoot\");return new Zl(e,1,t)},unstable_flushControlled:function(e){var t=Ou;Ou|=1;try{Va(99,e)}finally{(Ou=t)===yu&&Ha()}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[lr,sr,cr,R.injectEventPluginsByName,d,Pt,function(e){C(e,Ot)},ae,oe,Tn,N,Sl,{current:!1}]}};!function(e){var t=e.findFiberByHostInstance;(function(e){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Ml=function(e){try{t.onCommitFiberRoot(n,e,void 0,64===(64&e.current.effectTag))}catch(r){}},Al=function(e){try{t.onCommitFiberUnmount(n,e)}catch(r){}}}catch(r){}})(a({},e,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:A.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=kt(e))?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))}({findFiberByHostInstance:ur,bundleType:0,version:\"16.10.2\",rendererPackageName:\"react-dom\"});var os={default:as},is=os&&as||os;e.exports=is.default||is},function(e,t,n){\"use strict\";e.exports=n(90)},function(e,t,n){\"use strict\";var r,a,o,i,u;if(Object.defineProperty(t,\"__esModule\",{value:!0}),\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var l=null,s=null,c=function e(){if(null!==l)try{var n=t.unstable_now();l(!0,n),l=null}catch(r){throw setTimeout(e,0),r}},f=Date.now();t.unstable_now=function(){return Date.now()-f},r=function(e){null!==l?setTimeout(r,0,e):(l=e,setTimeout(c,0))},a=function(e,t){s=setTimeout(e,t)},o=function(){clearTimeout(s)},i=function(){return!1},u=t.unstable_forceFrameRate=function(){}}else{var d=window.performance,p=window.Date,b=window.setTimeout,h=window.clearTimeout,m=window.requestAnimationFrame,y=window.cancelAnimationFrame;if(\"undefined\"!==typeof console&&(\"function\"!==typeof m&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\"function\"!==typeof y&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")),\"object\"===typeof d&&\"function\"===typeof d.now)t.unstable_now=function(){return d.now()};else{var v=p.now();t.unstable_now=function(){return p.now()-v}}var g=!1,w=null,x=-1,k=5,E=0;i=function(){return t.unstable_now()>=E},u=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):k=0<e?Math.floor(1e3/e):33.33};var _=new MessageChannel,T=_.port2;_.port1.onmessage=function(){if(null!==w){var e=t.unstable_now();E=e+k;try{w(!0,e)?T.postMessage(null):(g=!1,w=null)}catch(n){throw T.postMessage(null),n}}else g=!1},r=function(e){w=e,g||(g=!0,T.postMessage(null))},a=function(e,n){x=b((function(){e(t.unstable_now())}),n)},o=function(){h(x),x=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=Math.floor((n-1)/2),a=e[r];if(!(void 0!==a&&0<P(a,t)))break e;e[r]=t,e[n]=a,n=r}}function C(e){return void 0===(e=e[0])?null:e}function O(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length;r<a;){var o=2*(r+1)-1,i=e[o],u=o+1,l=e[u];if(void 0!==i&&0>P(i,n))void 0!==l&&0>P(l,i)?(e[r]=l,e[u]=n,r=u):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==l&&0>P(l,n)))break e;e[r]=l,e[u]=n,r=u}}}return t}return null}function P(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var N=[],R=[],M=1,A=null,j=3,F=!1,L=!1,D=!1;function I(e){for(var t=C(R);null!==t;){if(null===t.callback)O(R);else{if(!(t.startTime<=e))break;O(R),t.sortIndex=t.expirationTime,S(N,t)}t=C(R)}}function z(e){if(D=!1,I(e),!L)if(null!==C(N))L=!0,r(U);else{var t=C(R);null!==t&&a(z,t.startTime-e)}}function U(e,n){L=!1,D&&(D=!1,o()),F=!0;var r=j;try{for(I(n),A=C(N);null!==A&&(!(A.expirationTime>n)||e&&!i());){var u=A.callback;if(null!==u){A.callback=null,j=A.priorityLevel;var l=u(A.expirationTime<=n);n=t.unstable_now(),\"function\"===typeof l?A.callback=l:A===C(N)&&O(N),I(n)}else O(N);A=C(N)}if(null!==A)var s=!0;else{var c=C(R);null!==c&&a(z,c.startTime-n),s=!1}return s}finally{A=null,j=r,F=!1}}function B(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var V=u;t.unstable_ImmediatePriority=1,t.unstable_UserBlockingPriority=2,t.unstable_NormalPriority=3,t.unstable_IdlePriority=5,t.unstable_LowPriority=4,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=j;j=e;try{return t()}finally{j=n}},t.unstable_next=function(e){switch(j){case 1:case 2:case 3:var t=3;break;default:t=j}var n=j;j=t;try{return e()}finally{j=n}},t.unstable_scheduleCallback=function(e,n,i){var u=t.unstable_now();if(\"object\"===typeof i&&null!==i){var l=i.delay;l=\"number\"===typeof l&&0<l?u+l:u,i=\"number\"===typeof i.timeout?i.timeout:B(e)}else i=B(e),l=u;return e={id:M++,callback:n,priorityLevel:e,startTime:l,expirationTime:i=l+i,sortIndex:-1},l>u?(e.sortIndex=l,S(R,e),null===C(N)&&e===C(R)&&(D?o():D=!0,a(z,l-u))):(e.sortIndex=i,S(N,e),L||F||(L=!0,r(U))),e},t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_wrapCallback=function(e){var t=j;return function(){var n=j;j=t;try{return e.apply(this,arguments)}finally{j=n}}},t.unstable_getCurrentPriorityLevel=function(){return j},t.unstable_shouldYield=function(){var e=t.unstable_now();I(e);var n=C(N);return n!==A&&null!==A&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime<A.expirationTime||i()},t.unstable_requestPaint=V,t.unstable_continueExecution=function(){L||F||(L=!0,r(U))},t.unstable_pauseExecution=function(){},t.unstable_getFirstCallbackNode=function(){return C(N)},t.unstable_Profiling=null},,function(e,t,n){\"use strict\";var r=n(2),a=n(54),o=n(94),i=n(60);function u(e){var t=new o(e),n=a(o.prototype.request,t);return r.extend(n,o.prototype,t),r.extend(n,t),n}var l=u(n(57));l.Axios=o,l.create=function(e){return u(i(l.defaults,e))},l.Cancel=n(61),l.CancelToken=n(107),l.isCancel=n(56),l.all=function(e){return Promise.all(e)},l.spread=n(108),e.exports=l,e.exports.default=l},function(e,t){e.exports=function(e){return null!=e&&null!=e.constructor&&\"function\"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,t,n){\"use strict\";var r=n(2),a=n(55),o=n(95),i=n(96),u=n(60);function l(e){this.defaults=e,this.interceptors={request:new o,response:new o}}l.prototype.request=function(e){\"string\"===typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=u(this.defaults,e)).method=e.method?e.method.toLowerCase():\"get\";var t=[i,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));t.length;)n=n.then(t.shift(),t.shift());return n},l.prototype.getUri=function(e){return e=u(this.defaults,e),a(e.url,e.params,e.paramsSerializer).replace(/^\\?/,\"\")},r.forEach([\"delete\",\"get\",\"head\",\"options\"],(function(e){l.prototype[e]=function(t,n){return this.request(r.merge(n||{},{method:e,url:t}))}})),r.forEach([\"post\",\"put\",\"patch\"],(function(e){l.prototype[e]=function(t,n,a){return this.request(r.merge(a||{},{method:e,url:t,data:n}))}})),e.exports=l},function(e,t,n){\"use strict\";var r=n(2);function a(){this.handlers=[]}a.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},a.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},a.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=a},function(e,t,n){\"use strict\";var r=n(2),a=n(97),o=n(56),i=n(57),u=n(105),l=n(106);function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return s(e),e.baseURL&&!u(e.url)&&(e.url=l(e.baseURL,e.url)),e.headers=e.headers||{},e.data=a(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),r.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],(function(t){delete e.headers[t]})),(e.adapter||i.adapter)(e).then((function(t){return s(e),t.data=a(t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(s(e),t&&t.response&&(t.response.data=a(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},function(e,t,n){\"use strict\";var r=n(2);e.exports=function(e,t,n){return r.forEach(n,(function(n){e=n(e,t)})),e}},function(e,t){var n,r,a=e.exports={};function o(){throw new Error(\"setTimeout has not been defined\")}function i(){throw new Error(\"clearTimeout has not been defined\")}function u(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=\"function\"===typeof setTimeout?setTimeout:o}catch(e){n=o}try{r=\"function\"===typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var l,s=[],c=!1,f=-1;function d(){c&&l&&(c=!1,l.length?s=l.concat(s):f=-1,s.length&&p())}function p(){if(!c){var e=u(d);c=!0;for(var t=s.length;t;){for(l=s,s=[];++f<t;)l&&l[f].run();f=-1,t=s.length}l=null,c=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function b(e,t){this.fun=e,this.array=t}function h(){}a.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];s.push(new b(e,t)),1!==s.length||c||u(p)},b.prototype.run=function(){this.fun.apply(null,this.array)},a.title=\"browser\",a.browser=!0,a.env={},a.argv=[],a.version=\"\",a.versions={},a.on=h,a.addListener=h,a.once=h,a.off=h,a.removeListener=h,a.removeAllListeners=h,a.emit=h,a.prependListener=h,a.prependOnceListener=h,a.listeners=function(e){return[]},a.binding=function(e){throw new Error(\"process.binding is not supported\")},a.cwd=function(){return\"/\"},a.chdir=function(e){throw new Error(\"process.chdir is not supported\")},a.umask=function(){return 0}},function(e,t,n){\"use strict\";var r=n(2);e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},function(e,t,n){\"use strict\";var r=n(59);e.exports=function(e,t,n){var a=n.config.validateStatus;!a||a(n.status)?e(n):t(r(\"Request failed with status code \"+n.status,n.config,null,n.request,n))}},function(e,t,n){\"use strict\";e.exports=function(e,t,n,r,a){return e.config=t,n&&(e.code=n),e.request=r,e.response=a,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){\"use strict\";var r=n(2),a=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];e.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split(\"\\n\"),(function(e){if(o=e.indexOf(\":\"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t){if(i[t]&&a.indexOf(t)>=0)return;i[t]=\"set-cookie\"===t?(i[t]?i[t]:[]).concat([n]):i[t]?i[t]+\", \"+n:n}})),i):i}},function(e,t,n){\"use strict\";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function a(e){var r=e;return t&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=a(window.location.href),function(t){var n=r.isString(t)?a(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){\"use strict\";var r=n(2);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,a,o,i){var u=[];u.push(e+\"=\"+encodeURIComponent(t)),r.isNumber(n)&&u.push(\"expires=\"+new Date(n).toGMTString()),r.isString(a)&&u.push(\"path=\"+a),r.isString(o)&&u.push(\"domain=\"+o),!0===i&&u.push(\"secure\"),document.cookie=u.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,t,n){\"use strict\";e.exports=function(e){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(e)}},function(e,t,n){\"use strict\";e.exports=function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}},function(e,t,n){\"use strict\";var r=n(61);function a(e){if(\"function\"!==typeof e)throw new TypeError(\"executor must be a function.\");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}a.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},a.source=function(){var e;return{token:new a((function(t){e=t})),cancel:e}},e.exports=a},function(e,t,n){\"use strict\";e.exports=function(e){return function(t){return e.apply(null,t)}}},,,,,function(e,t,n){n(33),n(44),e.exports=n(45).f(\"iterator\")},function(e,t,n){var r=n(34),a=n(35);e.exports=function(e){return function(t,n){var o,i,u=String(a(t)),l=r(n),s=u.length;return l<0||l>=s?e?\"\":void 0:(o=u.charCodeAt(l))<55296||o>56319||l+1===s||(i=u.charCodeAt(l+1))<56320||i>57343?e?u.charAt(l):o:e?u.slice(l,l+2):i-56320+(o-55296<<10)+65536}}},function(e,t){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(e+\" is not a function!\");return e}},function(e,t,n){\"use strict\";var r=n(37),a=n(21),o=n(42),i={};n(10)(i,n(4)(\"iterator\"),(function(){return this})),e.exports=function(e,t,n){e.prototype=r(i,{next:a(1,n)}),o(e,t+\" Iterator\")}},function(e,t,n){var r=n(11),a=n(12),o=n(18);e.exports=n(13)?Object.defineProperties:function(e,t){a(e);for(var n,i=o(t),u=i.length,l=0;u>l;)r.f(e,n=i[l++],t[n]);return e}},function(e,t,n){var r=n(15),a=n(119),o=n(120);e.exports=function(e){return function(t,n,i){var u,l=r(t),s=a(l.length),c=o(i,s);if(e&&n!=n){for(;s>c;)if((u=l[c++])!=u)return!0}else for(;s>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}}},function(e,t,n){var r=n(34),a=Math.min;e.exports=function(e){return e>0?a(r(e),9007199254740991):0}},function(e,t,n){var r=n(34),a=Math.max,o=Math.min;e.exports=function(e,t){return(e=r(e))<0?a(e+t,0):o(e,t)}},function(e,t,n){var r=n(5).document;e.exports=r&&r.documentElement},function(e,t,n){var r=n(9),a=n(43),o=n(39)(\"IE_PROTO\"),i=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=a(e),r(e,o)?e[o]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?i:null}},function(e,t,n){\"use strict\";var r=n(124),a=n(125),o=n(17),i=n(15);e.exports=n(63)(Array,\"Array\",(function(e,t){this._t=i(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,a(1)):a(0,\"keys\"==t?n:\"values\"==t?e[n]:[n,e[n]])}),\"values\"),o.Arguments=o.Array,r(\"keys\"),r(\"values\"),r(\"entries\")},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){e.exports={default:n(127),__esModule:!0}},function(e,t,n){n(128),n(132),n(133),n(134),e.exports=n(1).Symbol},function(e,t,n){\"use strict\";var r=n(5),a=n(9),o=n(13),i=n(7),u=n(67),l=n(129).KEY,s=n(14),c=n(40),f=n(42),d=n(22),p=n(4),b=n(45),h=n(46),m=n(130),y=n(131),v=n(12),g=n(8),w=n(15),x=n(36),k=n(21),E=n(37),_=n(70),T=n(72),S=n(11),C=n(18),O=T.f,P=S.f,N=_.f,R=r.Symbol,M=r.JSON,A=M&&M.stringify,j=p(\"_hidden\"),F=p(\"toPrimitive\"),L={}.propertyIsEnumerable,D=c(\"symbol-registry\"),I=c(\"symbols\"),z=c(\"op-symbols\"),U=Object.prototype,B=\"function\"==typeof R,V=r.QObject,W=!V||!V.prototype||!V.prototype.findChild,q=o&&s((function(){return 7!=E(P({},\"a\",{get:function(){return P(this,\"a\",{value:7}).a}})).a}))?function(e,t,n){var r=O(U,t);r&&delete U[t],P(e,t,n),r&&e!==U&&P(U,t,r)}:P,H=function(e){var t=I[e]=E(R.prototype);return t._k=e,t},$=B&&\"symbol\"==typeof R.iterator?function(e){return\"symbol\"==typeof e}:function(e){return e instanceof R},K=function(e,t,n){return e===U&&K(z,t,n),v(e),t=x(t,!0),v(n),a(I,t)?(n.enumerable?(a(e,j)&&e[j][t]&&(e[j][t]=!1),n=E(n,{enumerable:k(0,!1)})):(a(e,j)||P(e,j,k(1,{})),e[j][t]=!0),q(e,t,n)):P(e,t,n)},Q=function(e,t){v(e);for(var n,r=m(t=w(t)),a=0,o=r.length;o>a;)K(e,n=r[a++],t[n]);return e},G=function(e){var t=L.call(this,e=x(e,!0));return!(this===U&&a(I,e)&&!a(z,e))&&(!(t||!a(this,e)||!a(I,e)||a(this,j)&&this[j][e])||t)},Y=function(e,t){if(e=w(e),t=x(t,!0),e!==U||!a(I,t)||a(z,t)){var n=O(e,t);return!n||!a(I,t)||a(e,j)&&e[j][t]||(n.enumerable=!0),n}},X=function(e){for(var t,n=N(w(e)),r=[],o=0;n.length>o;)a(I,t=n[o++])||t==j||t==l||r.push(t);return r},J=function(e){for(var t,n=e===U,r=N(n?z:w(e)),o=[],i=0;r.length>i;)!a(I,t=r[i++])||n&&!a(U,t)||o.push(I[t]);return o};B||(u((R=function(){if(this instanceof R)throw TypeError(\"Symbol is not a constructor!\");var e=d(arguments.length>0?arguments[0]:void 0),t=function t(n){this===U&&t.call(z,n),a(this,j)&&a(this[j],e)&&(this[j][e]=!1),q(this,e,k(1,n))};return o&&W&&q(U,e,{configurable:!0,set:t}),H(e)}).prototype,\"toString\",(function(){return this._k})),T.f=Y,S.f=K,n(71).f=_.f=X,n(23).f=G,n(47).f=J,o&&!n(20)&&u(U,\"propertyIsEnumerable\",G,!0),b.f=function(e){return H(p(e))}),i(i.G+i.W+i.F*!B,{Symbol:R});for(var Z=\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),ee=0;Z.length>ee;)p(Z[ee++]);for(var te=C(p.store),ne=0;te.length>ne;)h(te[ne++]);i(i.S+i.F*!B,\"Symbol\",{for:function(e){return a(D,e+=\"\")?D[e]:D[e]=R(e)},keyFor:function(e){if(!$(e))throw TypeError(e+\" is not a symbol!\");for(var t in D)if(D[t]===e)return t},useSetter:function(){W=!0},useSimple:function(){W=!1}}),i(i.S+i.F*!B,\"Object\",{create:function(e,t){return void 0===t?E(e):Q(E(e),t)},defineProperty:K,defineProperties:Q,getOwnPropertyDescriptor:Y,getOwnPropertyNames:X,getOwnPropertySymbols:J}),M&&i(i.S+i.F*(!B||s((function(){var e=R();return\"[null]\"!=A([e])||\"{}\"!=A({a:e})||\"{}\"!=A(Object(e))}))),\"JSON\",{stringify:function(e){for(var t,n,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(n=t=r[1],(g(t)||void 0!==e)&&!$(e))return y(t)||(t=function(e,t){if(\"function\"==typeof n&&(t=n.call(this,e,t)),!$(t))return t}),r[1]=t,A.apply(M,r)}}),R.prototype[F]||n(10)(R.prototype,F,R.prototype.valueOf),f(R,\"Symbol\"),f(Math,\"Math\",!0),f(r.JSON,\"JSON\",!0)},function(e,t,n){var r=n(22)(\"meta\"),a=n(8),o=n(9),i=n(11).f,u=0,l=Object.isExtensible||function(){return!0},s=!n(14)((function(){return l(Object.preventExtensions({}))})),c=function(e){i(e,r,{value:{i:\"O\"+ ++u,w:{}}})},f=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!a(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!o(e,r)){if(!l(e))return\"F\";if(!t)return\"E\";c(e)}return e[r].i},getWeak:function(e,t){if(!o(e,r)){if(!l(e))return!0;if(!t)return!1;c(e)}return e[r].w},onFreeze:function(e){return s&&f.NEED&&l(e)&&!o(e,r)&&c(e),e}}},function(e,t,n){var r=n(18),a=n(47),o=n(23);e.exports=function(e){var t=r(e),n=a.f;if(n)for(var i,u=n(e),l=o.f,s=0;u.length>s;)l.call(e,i=u[s++])&&t.push(i);return t}},function(e,t,n){var r=n(38);e.exports=Array.isArray||function(e){return\"Array\"==r(e)}},function(e,t){},function(e,t,n){n(46)(\"asyncIterator\")},function(e,t,n){n(46)(\"observable\")},function(e,t,n){e.exports={default:n(136),__esModule:!0}},function(e,t,n){n(137),e.exports=n(1).Object.setPrototypeOf},function(e,t,n){var r=n(7);r(r.S,\"Object\",{setPrototypeOf:n(138).set})},function(e,t,n){var r=n(8),a=n(12),o=function(e,t){if(a(e),!r(t)&&null!==t)throw TypeError(t+\": can't set as prototype!\")};e.exports={set:Object.setPrototypeOf||(\"__proto__\"in{}?function(e,t,r){try{(r=n(64)(Function.call,n(72).f(Object.prototype,\"__proto__\").set,2))(e,[]),t=!(e instanceof Array)}catch(a){t=!0}return function(e,n){return o(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:o}},function(e,t,n){e.exports={default:n(140),__esModule:!0}},function(e,t,n){n(141);var r=n(1).Object;e.exports=function(e,t){return r.create(e,t)}},function(e,t,n){var r=n(7);r(r.S,\"Object\",{create:n(37)})},function(e,t,n){e.exports={default:n(143),__esModule:!0}},function(e,t,n){n(144),e.exports=n(1).Object.assign},function(e,t,n){var r=n(7);r(r.S+r.F,\"Object\",{assign:n(145)})},function(e,t,n){\"use strict\";var r=n(18),a=n(47),o=n(23),i=n(43),u=n(69),l=Object.assign;e.exports=!l||n(14)((function(){var e={},t={},n=Symbol(),r=\"abcdefghijklmnopqrst\";return e[n]=7,r.split(\"\").forEach((function(e){t[e]=e})),7!=l({},e)[n]||Object.keys(l({},t)).join(\"\")!=r}))?function(e,t){for(var n=i(e),l=arguments.length,s=1,c=a.f,f=o.f;l>s;)for(var d,p=u(arguments[s++]),b=c?r(p).concat(c(p)):r(p),h=b.length,m=0;h>m;)f.call(p,d=b[m++])&&(n[d]=p[d]);return n}:l},function(e,t,n){n(147),e.exports=n(1).Object.keys},function(e,t,n){var r=n(43),a=n(18);n(73)(\"keys\",(function(){return function(e){return a(r(e))}}))},function(e,t,n){\"use strict\";var r=n(149);function a(){}e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var u=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw u.name=\"Invariant Violation\",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return n.checkPropTypes=a,n.PropTypes=n,n}},function(e,t,n){\"use strict\";e.exports=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\"},function(e,t,n){\"use strict\";t.__esModule=!0;var r,a=n(62),o=(r=a)&&r.__esModule?r:{default:r};t.default=function(e){var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&\"function\"===typeof e[o.default])return\"Iterable\";if(\"Custom\"===t&&e.constructor!==Object&&e instanceof Object)return\"Object\";return t}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=s(n(3)),a=s(n(16)),o=s(n(75)),i=s(n(0)),u=s(n(6)),l=s(n(49));function s(e){return e&&e.__esModule?e:{default:e}}function c(e){var t=(0,o.default)(e).length;return t+\" \"+(1!==t?\"keys\":\"key\")}var f=function(e){var t=e.data,n=(0,a.default)(e,[\"data\"]);return i.default.createElement(l.default,(0,r.default)({},n,{data:t,nodeType:\"Object\",nodeTypeIndicator:\"Error\"===n.nodeType?\"Error()\":\"{}\",createItemString:c,expandable:(0,o.default)(t).length>0}))};f.propTypes={data:u.default.object,nodeType:u.default.string},t.default=f},function(e,t,n){n(153);var r=n(1).Object;e.exports=function(e){return r.getOwnPropertyNames(e)}},function(e,t,n){n(73)(\"getOwnPropertyNames\",(function(){return n(70).f}))},function(e,t,n){\"use strict\";t.__esModule=!0;var r=i(n(50)),a=i(n(75)),o=i(n(24));function i(e){return e&&e.__esModule?e:{default:e}}function u(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1/0,u=void 0;if(\"Object\"===e){var l=(0,a.default)(t);n&&l.sort(!0===n?void 0:n),u={entries:(l=l.slice(o,i+1)).map((function(e){return{key:e,value:t[e]}}))}}else if(\"Array\"===e)u={entries:t.slice(o,i+1).map((function(e,t){return{key:t+o,value:e}}))};else{var s=0,c=[],f=!0,d=function(e){return\"function\"===typeof e.set}(t),p=t,b=Array.isArray(p),h=0;for(p=b?p:(0,r.default)(p);;){var m;if(b){if(h>=p.length)break;m=p[h++]}else{if((h=p.next()).done)break;m=h.value}var y=m;if(s>i){f=!1;break}o<=s&&(d&&Array.isArray(y)?\"string\"===typeof y[0]||\"number\"===typeof y[0]?c.push({key:y[0],value:y[1]}):c.push({key:\"[entry \"+s+\"]\",value:{\"[key]\":y[0],\"[value]\":y[1]}}):c.push({key:s,value:y})),s++}u={hasMore:!f,entries:c}}return u}function l(e,t,n){for(var r=[];t-e>n*n;)n*=n;for(var a=e;a<=t;a+=n)r.push({from:a,to:Math.min(t,a+n-1)});return r}t.default=function(e,t,n,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1/0,s=u.bind(null,e,t,n);if(!r)return s().entries;var c=i<1/0,f=Math.min(i-a,function(e,t){if(\"Object\"===e)return(0,o.default)(t).length;if(\"Array\"===e)return t.length;return 1/0}(e,t));if(\"Iterable\"!==e){if(f<=r||r<7)return s(a,i).entries}else if(f<=r&&!c)return s(a,i).entries;var d=void 0;if(\"Iterable\"===e){var p=s(a,a+r-1),b=p.hasMore,h=p.entries;d=b?[].concat(h,l(a+r,a+2*r-1,r)):h}else d=c?l(a,i,r):[].concat(s(0,r-5).entries,l(r-4,f-5,r),s(f-4,f-1).entries);return d}},function(e,t,n){n(44),n(33),e.exports=n(156)},function(e,t,n){var r=n(12),a=n(157);e.exports=n(1).getIterator=function(e){var t=a(e);if(\"function\"!=typeof t)throw TypeError(e+\" is not iterable!\");return r(t.call(e))}},function(e,t,n){var r=n(77),a=n(4)(\"iterator\"),o=n(17);e.exports=n(1).getIteratorMethod=function(e){if(void 0!=e)return e[a]||e[\"@@iterator\"]||o[r(e)]}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=c(n(3)),a=c(n(30)),o=c(n(31)),i=c(n(48)),u=c(n(0)),l=c(n(6)),s=c(n(76));function c(e){return e&&e.__esModule?e:{default:e}}var f=function(e){function t(n){(0,a.default)(this,t);var r=(0,o.default)(this,e.call(this,n));return r.state={expanded:!1},r.handleClick=r.handleClick.bind(r),r}return(0,i.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.styling,n=e.from,a=e.to,o=e.renderChildNodes,i=e.nodeType;return this.state.expanded?u.default.createElement(\"div\",t(\"itemRange\",this.state.expanded),o(this.props,n,a)):u.default.createElement(\"div\",(0,r.default)({},t(\"itemRange\",this.state.expanded),{onClick:this.handleClick}),u.default.createElement(s.default,{nodeType:i,styling:t,expanded:!1,onClick:this.handleClick,arrowStyle:\"double\"}),n+\" ... \"+a)},t.prototype.handleClick=function(){this.setState({expanded:!this.state.expanded})},t}(u.default.Component);f.propTypes={styling:l.default.func.isRequired,from:l.default.number.isRequired,to:l.default.number.isRequired,renderChildNodes:l.default.func.isRequired,nodeType:l.default.string.isRequired},t.default=f},function(e,t,n){\"use strict\";t.__esModule=!0;var r=l(n(3)),a=l(n(16)),o=l(n(0)),i=l(n(6)),u=l(n(49));function l(e){return e&&e.__esModule?e:{default:e}}function s(e){return e.length+\" \"+(1!==e.length?\"items\":\"item\")}var c=function(e){var t=e.data,n=(0,a.default)(e,[\"data\"]);return o.default.createElement(u.default,(0,r.default)({},n,{data:t,nodeType:\"Array\",nodeTypeIndicator:\"[]\",createItemString:s,expandable:t.length>0}))};c.propTypes={data:i.default.array},t.default=c},function(e,t,n){\"use strict\";t.__esModule=!0;var r=s(n(3)),a=s(n(16)),o=s(n(50)),i=s(n(161));t.default=function(e){var t=(0,a.default)(e,[]);return u.default.createElement(l.default,(0,r.default)({},t,{nodeType:\"Iterable\",nodeTypeIndicator:\"()\",createItemString:c}))};var u=s(n(0)),l=s(n(49));function s(e){return e&&e.__esModule?e:{default:e}}function c(e,t){var n=0,r=!1;if((0,i.default)(e.size))n=e.size;else{var a=e,u=Array.isArray(a),l=0;for(a=u?a:(0,o.default)(a);;){if(u){if(l>=a.length)break;a[l++]}else{if((l=a.next()).done)break;l.value}if(t&&n+1>t){r=!0;break}n+=1}}return(r?\">\":\"\")+n+\" \"+(1!==n?\"entries\":\"entry\")}},function(e,t,n){e.exports={default:n(162),__esModule:!0}},function(e,t,n){n(163),e.exports=n(1).Number.isSafeInteger},function(e,t,n){var r=n(7),a=n(164),o=Math.abs;r(r.S,\"Number\",{isSafeInteger:function(e){return a(e)&&o(e)<=9007199254740991}})},function(e,t,n){var r=n(8),a=Math.floor;e.exports=function(e){return!r(e)&&isFinite(e)&&a(e)===e}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=o(n(0)),a=o(n(6));function o(e){return e&&e.__esModule?e:{default:e}}var i=function(e){var t=e.nodeType,n=e.styling,a=e.labelRenderer,o=e.keyPath,i=e.valueRenderer,u=e.value,l=e.valueGetter;return r.default.createElement(\"li\",n(\"value\",t,o),r.default.createElement(\"label\",n([\"label\",\"valueLabel\"],t,o),a(o,t,!1,!1)),r.default.createElement(\"span\",n(\"valueText\",t,o),i.apply(void 0,[l(u),u].concat(o))))};i.propTypes={nodeType:a.default.string.isRequired,styling:a.default.func.isRequired,labelRenderer:a.default.func.isRequired,keyPath:a.default.arrayOf(a.default.oneOfType([a.default.string,a.default.number])).isRequired,valueRenderer:a.default.func.isRequired,value:a.default.any,valueGetter:a.default.func},i.defaultProps={valueGetter:function(e){return e}},t.default=i},function(e,t,n){\"use strict\";t.__esModule=!0;var r=i(n(3)),a=n(78),o=i(n(218));function i(e){return e&&e.__esModule?e:{default:e}}var u=function(e){return{String:e.STRING_COLOR,Date:e.DATE_COLOR,Number:e.NUMBER_COLOR,Boolean:e.BOOLEAN_COLOR,Null:e.NULL_COLOR,Undefined:e.UNDEFINED_COLOR,Function:e.FUNCTION_COLOR,Symbol:e.SYMBOL_COLOR}};t.default=(0,a.createStyling)((function(e){var t=function(e){return{BACKGROUND_COLOR:e.base00,TEXT_COLOR:e.base07,STRING_COLOR:e.base0B,DATE_COLOR:e.base0B,NUMBER_COLOR:e.base09,BOOLEAN_COLOR:e.base09,NULL_COLOR:e.base08,UNDEFINED_COLOR:e.base08,FUNCTION_COLOR:e.base08,SYMBOL_COLOR:e.base08,LABEL_COLOR:e.base0D,ARROW_COLOR:e.base0D,ITEM_STRING_COLOR:e.base0B,ITEM_STRING_EXPANDED_COLOR:e.base03}}(e);return{tree:{border:0,padding:0,marginTop:\"0.5em\",marginBottom:\"0.5em\",marginLeft:\"0.125em\",marginRight:0,listStyle:\"none\",MozUserSelect:\"none\",WebkitUserSelect:\"none\",backgroundColor:t.BACKGROUND_COLOR},value:function(e,t,n){var a=e.style;return{style:(0,r.default)({},a,{paddingTop:\"0.25em\",paddingRight:0,marginLeft:\"0.875em\",WebkitUserSelect:\"text\",MozUserSelect:\"text\",wordWrap:\"break-word\",paddingLeft:n.length>1?\"2.125em\":\"1.25em\",textIndent:\"-0.5em\",wordBreak:\"break-all\"})}},label:{display:\"inline-block\",color:t.LABEL_COLOR},valueLabel:{margin:\"0 0.5em 0 0\"},valueText:function(e,n){var a=e.style;return{style:(0,r.default)({},a,{color:u(t)[n]})}},itemRange:function(e,n){return{style:{paddingTop:n?0:\"0.25em\",cursor:\"pointer\",color:t.LABEL_COLOR}}},arrow:function(e,t,n){var a=e.style;return{style:(0,r.default)({},a,{marginLeft:0,transition:\"150ms\",WebkitTransition:\"150ms\",MozTransition:\"150ms\",WebkitTransform:n?\"rotateZ(90deg)\":\"rotateZ(0deg)\",MozTransform:n?\"rotateZ(90deg)\":\"rotateZ(0deg)\",transform:n?\"rotateZ(90deg)\":\"rotateZ(0deg)\",transformOrigin:\"45% 50%\",WebkitTransformOrigin:\"45% 50%\",MozTransformOrigin:\"45% 50%\",position:\"relative\",lineHeight:\"1.1em\",fontSize:\"0.75em\"})}},arrowContainer:function(e,t){var n=e.style;return{style:(0,r.default)({},n,{display:\"inline-block\",paddingRight:\"0.5em\",paddingLeft:\"double\"===t?\"1em\":0,cursor:\"pointer\"})}},arrowSign:{color:t.ARROW_COLOR},arrowSignInner:{position:\"absolute\",top:0,left:\"-0.4em\"},nestedNode:function(e,t,n,a,o){var i=e.style;return{style:(0,r.default)({},i,{position:\"relative\",paddingTop:\"0.25em\",marginLeft:t.length>1?\"0.875em\":0,paddingLeft:o?0:\"1.125em\"})}},rootNode:{padding:0,margin:0},nestedNodeLabel:function(e,t,n,a,o){var i=e.style;return{style:(0,r.default)({},i,{margin:0,padding:0,WebkitUserSelect:o?\"inherit\":\"text\",MozUserSelect:o?\"inherit\":\"text\",cursor:o?\"pointer\":\"default\"})}},nestedNodeItemString:function(e,n,a,o){var i=e.style;return{style:(0,r.default)({},i,{paddingLeft:\"0.5em\",cursor:\"default\",color:o?t.ITEM_STRING_EXPANDED_COLOR:t.ITEM_STRING_COLOR})}},nestedNodeItemType:{marginLeft:\"0.3em\",marginRight:\"0.3em\"},nestedNodeChildren:function(e,t,n){var a=e.style;return{style:(0,r.default)({},a,{padding:0,margin:0,listStyle:\"none\",display:n?\"block\":\"none\"})}},rootNodeChildren:{padding:0,margin:0,listStyle:\"none\"}}}),{defaultBase16:o.default})},function(e,t,n){\"use strict\";t.__esModule=!0;var r=o(n(168)),a=o(n(50));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if(Array.isArray(e))return e;if((0,r.default)(Object(e)))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var u,l=(0,a.default)(e);!(r=(u=l.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(s){o=!0,i=s}finally{try{!r&&l.return&&l.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}},function(e,t,n){e.exports={default:n(169),__esModule:!0}},function(e,t,n){n(44),n(33),e.exports=n(170)},function(e,t,n){var r=n(77),a=n(4)(\"iterator\"),o=n(17);e.exports=n(1).isIterable=function(e){var t=Object(e);return void 0!==t[a]||\"@@iterator\"in t||o.hasOwnProperty(r(t))}},function(e,t,n){(function(t){var n=\"Expected a function\",r=\"__lodash_placeholder__\",a=1,o=2,i=4,u=8,l=16,s=32,c=64,f=128,d=512,p=1/0,b=9007199254740991,h=17976931348623157e292,m=NaN,y=[[\"ary\",f],[\"bind\",a],[\"bindKey\",o],[\"curry\",u],[\"curryRight\",l],[\"flip\",d],[\"partial\",s],[\"partialRight\",c],[\"rearg\",256]],v=\"[object Function]\",g=\"[object GeneratorFunction]\",w=\"[object Symbol]\",x=/^\\s+|\\s+$/g,k=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,E=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,_=/,? & /,T=/^[-+]0x[0-9a-f]+$/i,S=/^0b[01]+$/i,C=/^\\[object .+?Constructor\\]$/,O=/^0o[0-7]+$/i,P=/^(?:0|[1-9]\\d*)$/,N=parseInt,R=\"object\"==typeof t&&t&&t.Object===Object&&t,M=\"object\"==typeof self&&self&&self.Object===Object&&self,A=R||M||Function(\"return this\")();function j(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function F(e,t){return!!(e?e.length:0)&&function(e,t,n){if(t!==t)return function(e,t,n,r){var a=e.length,o=n+(r?1:-1);for(;r?o--:++o<a;)if(t(e[o],o,e))return o;return-1}(e,L,n);var r=n-1,a=e.length;for(;++r<a;)if(e[r]===t)return r;return-1}(e,t,0)>-1}function L(e){return e!==e}function D(e,t){for(var n=-1,a=e.length,o=0,i=[];++n<a;){var u=e[n];u!==t&&u!==r||(e[n]=r,i[o++]=n)}return i}var I=Function.prototype,z=Object.prototype,U=A[\"__core-js_shared__\"],B=function(){var e=/[^.]+$/.exec(U&&U.keys&&U.keys.IE_PROTO||\"\");return e?\"Symbol(src)_1.\"+e:\"\"}(),V=I.toString,W=z.hasOwnProperty,q=z.toString,H=RegExp(\"^\"+V.call(W).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),$=Object.create,K=Math.max,Q=Math.min,G=function(){var e=re(Object,\"defineProperty\"),t=re.name;return t&&t.length>2?e:void 0}();function Y(e){return ce(e)?$(e):{}}function X(e){return!(!ce(e)||(t=e,B&&B in t))&&(function(e){var t=ce(e)?q.call(e):\"\";return t==v||t==g}(e)||function(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(n){}return t}(e)?H:C).test(function(e){if(null!=e){try{return V.call(e)}catch(t){}try{return e+\"\"}catch(t){}}return\"\"}(e));var t}function J(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=Y(e.prototype),r=e.apply(n,t);return ce(r)?r:n}}function Z(e,t,n,r,i,s,c,p,b,h){var m=t&f,y=t&a,v=t&o,g=t&(u|l),w=t&d,x=v?void 0:J(e);return function a(){for(var o=arguments.length,u=Array(o),l=o;l--;)u[l]=arguments[l];if(g)var f=ne(a),d=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&r++;return r}(u,f);if(r&&(u=function(e,t,n,r){for(var a=-1,o=e.length,i=n.length,u=-1,l=t.length,s=K(o-i,0),c=Array(l+s),f=!r;++u<l;)c[u]=t[u];for(;++a<i;)(f||a<o)&&(c[n[a]]=e[a]);for(;s--;)c[u++]=e[a++];return c}(u,r,i,g)),s&&(u=function(e,t,n,r){for(var a=-1,o=e.length,i=-1,u=n.length,l=-1,s=t.length,c=K(o-u,0),f=Array(c+s),d=!r;++a<c;)f[a]=e[a];for(var p=a;++l<s;)f[p+l]=t[l];for(;++i<u;)(d||a<o)&&(f[p+n[i]]=e[a++]);return f}(u,s,c,g)),o-=d,g&&o<h){var k=D(u,f);return ee(e,t,Z,a.placeholder,n,u,k,p,b,h-o)}var E=y?n:this,_=v?E[e]:e;return o=u.length,p?u=function(e,t){var n=e.length,r=Q(t.length,n),a=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}(e);for(;r--;){var o=t[r];e[r]=ie(o,n)?a[o]:void 0}return e}(u,p):w&&o>1&&u.reverse(),m&&b<o&&(u.length=b),this&&this!==A&&this instanceof a&&(_=x||J(_)),_.apply(E,u)}}function ee(e,t,n,r,l,f,d,p,b,h){var m=t&u;t|=m?s:c,(t&=~(m?c:s))&i||(t&=~(a|o));var y=n(e,t,l,m?f:void 0,m?d:void 0,m?void 0:f,m?void 0:d,p,b,h);return y.placeholder=r,ue(y,e,t)}function te(e,t,r,i,f,d,p,b){var h=t&o;if(!h&&\"function\"!=typeof e)throw new TypeError(n);var m=i?i.length:0;if(m||(t&=~(s|c),i=f=void 0),p=void 0===p?p:K(de(p),0),b=void 0===b?b:de(b),m-=f?f.length:0,t&c){var y=i,v=f;i=f=void 0}var g=[e,t,r,i,f,y,v,d,p,b];if(e=g[0],t=g[1],r=g[2],i=g[3],f=g[4],!(b=g[9]=null==g[9]?h?0:e.length:K(g[9]-m,0))&&t&(u|l)&&(t&=~(u|l)),t&&t!=a)w=t==u||t==l?function(e,t,n){var r=J(e);return function a(){for(var o=arguments.length,i=Array(o),u=o,l=ne(a);u--;)i[u]=arguments[u];var s=o<3&&i[0]!==l&&i[o-1]!==l?[]:D(i,l);return(o-=s.length)<n?ee(e,t,Z,a.placeholder,void 0,i,s,void 0,void 0,n-o):j(this&&this!==A&&this instanceof a?r:e,this,i)}}(e,t,b):t!=s&&t!=(a|s)||f.length?Z.apply(void 0,g):function(e,t,n,r){var o=t&a,i=J(e);return function t(){for(var a=-1,u=arguments.length,l=-1,s=r.length,c=Array(s+u),f=this&&this!==A&&this instanceof t?i:e;++l<s;)c[l]=r[l];for(;u--;)c[l++]=arguments[++a];return j(f,o?n:this,c)}}(e,t,r,i);else var w=function(e,t,n){var r=t&a,o=J(e);return function t(){return(this&&this!==A&&this instanceof t?o:e).apply(r?n:this,arguments)}}(e,t,r);return ue(w,e,t)}function ne(e){return e.placeholder}function re(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return X(n)?n:void 0}function ae(e){var t=e.match(E);return t?t[1].split(_):[]}function oe(e,t){var n=t.length,r=n-1;return t[r]=(n>1?\"& \":\"\")+t[r],t=t.join(n>2?\", \":\" \"),e.replace(k,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}function ie(e,t){return!!(t=null==t?b:t)&&(\"number\"==typeof e||P.test(e))&&e>-1&&e%1==0&&e<t}var ue=G?function(e,t,n){var r,a=t+\"\";return G(e,\"toString\",{configurable:!0,enumerable:!1,value:(r=oe(a,le(ae(a),n)),function(){return r})})}:function(e){return e};function le(e,t){return function(e,t){for(var n=-1,r=e?e.length:0;++n<r&&!1!==t(e[n],n,e););}(y,(function(n){var r=\"_.\"+n[0];t&n[1]&&!F(e,r)&&e.push(r)})),e.sort()}function se(e,t,n){var r=te(e,u,void 0,void 0,void 0,void 0,void 0,t=n?void 0:t);return r.placeholder=se.placeholder,r}function ce(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function fe(e){return e?(e=function(e){if(\"number\"==typeof e)return e;if(function(e){return\"symbol\"==typeof e||function(e){return!!e&&\"object\"==typeof e}(e)&&q.call(e)==w}(e))return m;if(ce(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=ce(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(x,\"\");var n=S.test(e);return n||O.test(e)?N(e.slice(2),n?2:8):T.test(e)?m:+e}(e))===p||e===-p?(e<0?-1:1)*h:e===e?e:0:0===e?e:0}function de(e){var t=fe(e),n=t%1;return t===t?n?t-n:t:0}se.placeholder={},e.exports=se}).call(this,n(79))},function(e,t,n){\"use strict\";function r(e){return e&&e.__esModule?e.default:e}t.__esModule=!0;var a=n(173);t.threezerotwofour=r(a);var o=n(174);t.apathy=r(o);var i=n(175);t.ashes=r(i);var u=n(176);t.atelierDune=r(u);var l=n(177);t.atelierForest=r(l);var s=n(178);t.atelierHeath=r(s);var c=n(179);t.atelierLakeside=r(c);var f=n(180);t.atelierSeaside=r(f);var d=n(181);t.bespin=r(d);var p=n(182);t.brewer=r(p);var b=n(183);t.bright=r(b);var h=n(184);t.chalk=r(h);var m=n(185);t.codeschool=r(m);var y=n(186);t.colors=r(y);var v=n(187);t.default=r(v);var g=n(188);t.eighties=r(g);var w=n(189);t.embers=r(w);var x=n(190);t.flat=r(x);var k=n(191);t.google=r(k);var E=n(192);t.grayscale=r(E);var _=n(193);t.greenscreen=r(_);var T=n(194);t.harmonic=r(T);var S=n(195);t.hopscotch=r(S);var C=n(196);t.isotope=r(C);var O=n(197);t.marrakesh=r(O);var P=n(198);t.mocha=r(P);var N=n(199);t.monokai=r(N);var R=n(200);t.ocean=r(R);var M=n(201);t.paraiso=r(M);var A=n(202);t.pop=r(A);var j=n(203);t.railscasts=r(j);var F=n(204);t.shapeshifter=r(F);var L=n(205);t.solarized=r(L);var D=n(206);t.summerfruit=r(D);var I=n(207);t.tomorrow=r(I);var z=n(208);t.tube=r(z);var U=n(209);t.twilight=r(U)},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"threezerotwofour\",author:\"jan t. sott (http://github.com/idleberg)\",base00:\"#090300\",base01:\"#3a3432\",base02:\"#4a4543\",base03:\"#5c5855\",base04:\"#807d7c\",base05:\"#a5a2a2\",base06:\"#d6d5d4\",base07:\"#f7f7f7\",base08:\"#db2d20\",base09:\"#e8bbd0\",base0A:\"#fded02\",base0B:\"#01a252\",base0C:\"#b5e4f4\",base0D:\"#01a0e4\",base0E:\"#a16a94\",base0F:\"#cdab53\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"apathy\",author:\"jannik siebert (https://github.com/janniks)\",base00:\"#031A16\",base01:\"#0B342D\",base02:\"#184E45\",base03:\"#2B685E\",base04:\"#5F9C92\",base05:\"#81B5AC\",base06:\"#A7CEC8\",base07:\"#D2E7E4\",base08:\"#3E9688\",base09:\"#3E7996\",base0A:\"#3E4C96\",base0B:\"#883E96\",base0C:\"#963E4C\",base0D:\"#96883E\",base0E:\"#4C963E\",base0F:\"#3E965B\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"ashes\",author:\"jannik siebert (https://github.com/janniks)\",base00:\"#1C2023\",base01:\"#393F45\",base02:\"#565E65\",base03:\"#747C84\",base04:\"#ADB3BA\",base05:\"#C7CCD1\",base06:\"#DFE2E5\",base07:\"#F3F4F5\",base08:\"#C7AE95\",base09:\"#C7C795\",base0A:\"#AEC795\",base0B:\"#95C7AE\",base0C:\"#95AEC7\",base0D:\"#AE95C7\",base0E:\"#C795AE\",base0F:\"#C79595\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"atelier dune\",author:\"bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)\",base00:\"#20201d\",base01:\"#292824\",base02:\"#6e6b5e\",base03:\"#7d7a68\",base04:\"#999580\",base05:\"#a6a28c\",base06:\"#e8e4cf\",base07:\"#fefbec\",base08:\"#d73737\",base09:\"#b65611\",base0A:\"#cfb017\",base0B:\"#60ac39\",base0C:\"#1fad83\",base0D:\"#6684e1\",base0E:\"#b854d4\",base0F:\"#d43552\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"atelier forest\",author:\"bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest)\",base00:\"#1b1918\",base01:\"#2c2421\",base02:\"#68615e\",base03:\"#766e6b\",base04:\"#9c9491\",base05:\"#a8a19f\",base06:\"#e6e2e0\",base07:\"#f1efee\",base08:\"#f22c40\",base09:\"#df5320\",base0A:\"#d5911a\",base0B:\"#5ab738\",base0C:\"#00ad9c\",base0D:\"#407ee7\",base0E:\"#6666ea\",base0F:\"#c33ff3\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"atelier heath\",author:\"bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath)\",base00:\"#1b181b\",base01:\"#292329\",base02:\"#695d69\",base03:\"#776977\",base04:\"#9e8f9e\",base05:\"#ab9bab\",base06:\"#d8cad8\",base07:\"#f7f3f7\",base08:\"#ca402b\",base09:\"#a65926\",base0A:\"#bb8a35\",base0B:\"#379a37\",base0C:\"#159393\",base0D:\"#516aec\",base0E:\"#7b59c0\",base0F:\"#cc33cc\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"atelier lakeside\",author:\"bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/)\",base00:\"#161b1d\",base01:\"#1f292e\",base02:\"#516d7b\",base03:\"#5a7b8c\",base04:\"#7195a8\",base05:\"#7ea2b4\",base06:\"#c1e4f6\",base07:\"#ebf8ff\",base08:\"#d22d72\",base09:\"#935c25\",base0A:\"#8a8a0f\",base0B:\"#568c3b\",base0C:\"#2d8f6f\",base0D:\"#257fad\",base0E:\"#5d5db1\",base0F:\"#b72dd2\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"atelier seaside\",author:\"bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/)\",base00:\"#131513\",base01:\"#242924\",base02:\"#5e6e5e\",base03:\"#687d68\",base04:\"#809980\",base05:\"#8ca68c\",base06:\"#cfe8cf\",base07:\"#f0fff0\",base08:\"#e6193c\",base09:\"#87711d\",base0A:\"#c3c322\",base0B:\"#29a329\",base0C:\"#1999b3\",base0D:\"#3d62f5\",base0E:\"#ad2bee\",base0F:\"#e619c3\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"bespin\",author:\"jan t. sott\",base00:\"#28211c\",base01:\"#36312e\",base02:\"#5e5d5c\",base03:\"#666666\",base04:\"#797977\",base05:\"#8a8986\",base06:\"#9d9b97\",base07:\"#baae9e\",base08:\"#cf6a4c\",base09:\"#cf7d34\",base0A:\"#f9ee98\",base0B:\"#54be0d\",base0C:\"#afc4db\",base0D:\"#5ea6ea\",base0E:\"#9b859d\",base0F:\"#937121\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"brewer\",author:\"timoth\\xe9e poisot (http://github.com/tpoisot)\",base00:\"#0c0d0e\",base01:\"#2e2f30\",base02:\"#515253\",base03:\"#737475\",base04:\"#959697\",base05:\"#b7b8b9\",base06:\"#dadbdc\",base07:\"#fcfdfe\",base08:\"#e31a1c\",base09:\"#e6550d\",base0A:\"#dca060\",base0B:\"#31a354\",base0C:\"#80b1d3\",base0D:\"#3182bd\",base0E:\"#756bb1\",base0F:\"#b15928\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"bright\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#000000\",base01:\"#303030\",base02:\"#505050\",base03:\"#b0b0b0\",base04:\"#d0d0d0\",base05:\"#e0e0e0\",base06:\"#f5f5f5\",base07:\"#ffffff\",base08:\"#fb0120\",base09:\"#fc6d24\",base0A:\"#fda331\",base0B:\"#a1c659\",base0C:\"#76c7b7\",base0D:\"#6fb3d2\",base0E:\"#d381c3\",base0F:\"#be643c\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"chalk\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#151515\",base01:\"#202020\",base02:\"#303030\",base03:\"#505050\",base04:\"#b0b0b0\",base05:\"#d0d0d0\",base06:\"#e0e0e0\",base07:\"#f5f5f5\",base08:\"#fb9fb1\",base09:\"#eda987\",base0A:\"#ddb26f\",base0B:\"#acc267\",base0C:\"#12cfc0\",base0D:\"#6fc2ef\",base0E:\"#e1a3ee\",base0F:\"#deaf8f\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"codeschool\",author:\"brettof86\",base00:\"#232c31\",base01:\"#1c3657\",base02:\"#2a343a\",base03:\"#3f4944\",base04:\"#84898c\",base05:\"#9ea7a6\",base06:\"#a7cfa3\",base07:\"#b5d8f6\",base08:\"#2a5491\",base09:\"#43820d\",base0A:\"#a03b1e\",base0B:\"#237986\",base0C:\"#b02f30\",base0D:\"#484d79\",base0E:\"#c59820\",base0F:\"#c98344\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"colors\",author:\"mrmrs (http://clrs.cc)\",base00:\"#111111\",base01:\"#333333\",base02:\"#555555\",base03:\"#777777\",base04:\"#999999\",base05:\"#bbbbbb\",base06:\"#dddddd\",base07:\"#ffffff\",base08:\"#ff4136\",base09:\"#ff851b\",base0A:\"#ffdc00\",base0B:\"#2ecc40\",base0C:\"#7fdbff\",base0D:\"#0074d9\",base0E:\"#b10dc9\",base0F:\"#85144b\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"default\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#181818\",base01:\"#282828\",base02:\"#383838\",base03:\"#585858\",base04:\"#b8b8b8\",base05:\"#d8d8d8\",base06:\"#e8e8e8\",base07:\"#f8f8f8\",base08:\"#ab4642\",base09:\"#dc9656\",base0A:\"#f7ca88\",base0B:\"#a1b56c\",base0C:\"#86c1b9\",base0D:\"#7cafc2\",base0E:\"#ba8baf\",base0F:\"#a16946\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"eighties\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#2d2d2d\",base01:\"#393939\",base02:\"#515151\",base03:\"#747369\",base04:\"#a09f93\",base05:\"#d3d0c8\",base06:\"#e8e6df\",base07:\"#f2f0ec\",base08:\"#f2777a\",base09:\"#f99157\",base0A:\"#ffcc66\",base0B:\"#99cc99\",base0C:\"#66cccc\",base0D:\"#6699cc\",base0E:\"#cc99cc\",base0F:\"#d27b53\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"embers\",author:\"jannik siebert (https://github.com/janniks)\",base00:\"#16130F\",base01:\"#2C2620\",base02:\"#433B32\",base03:\"#5A5047\",base04:\"#8A8075\",base05:\"#A39A90\",base06:\"#BEB6AE\",base07:\"#DBD6D1\",base08:\"#826D57\",base09:\"#828257\",base0A:\"#6D8257\",base0B:\"#57826D\",base0C:\"#576D82\",base0D:\"#6D5782\",base0E:\"#82576D\",base0F:\"#825757\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"flat\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#2C3E50\",base01:\"#34495E\",base02:\"#7F8C8D\",base03:\"#95A5A6\",base04:\"#BDC3C7\",base05:\"#e0e0e0\",base06:\"#f5f5f5\",base07:\"#ECF0F1\",base08:\"#E74C3C\",base09:\"#E67E22\",base0A:\"#F1C40F\",base0B:\"#2ECC71\",base0C:\"#1ABC9C\",base0D:\"#3498DB\",base0E:\"#9B59B6\",base0F:\"#be643c\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"google\",author:\"seth wright (http://sethawright.com)\",base00:\"#1d1f21\",base01:\"#282a2e\",base02:\"#373b41\",base03:\"#969896\",base04:\"#b4b7b4\",base05:\"#c5c8c6\",base06:\"#e0e0e0\",base07:\"#ffffff\",base08:\"#CC342B\",base09:\"#F96A38\",base0A:\"#FBA922\",base0B:\"#198844\",base0C:\"#3971ED\",base0D:\"#3971ED\",base0E:\"#A36AC7\",base0F:\"#3971ED\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"grayscale\",author:\"alexandre gavioli (https://github.com/alexx2/)\",base00:\"#101010\",base01:\"#252525\",base02:\"#464646\",base03:\"#525252\",base04:\"#ababab\",base05:\"#b9b9b9\",base06:\"#e3e3e3\",base07:\"#f7f7f7\",base08:\"#7c7c7c\",base09:\"#999999\",base0A:\"#a0a0a0\",base0B:\"#8e8e8e\",base0C:\"#868686\",base0D:\"#686868\",base0E:\"#747474\",base0F:\"#5e5e5e\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"green screen\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#001100\",base01:\"#003300\",base02:\"#005500\",base03:\"#007700\",base04:\"#009900\",base05:\"#00bb00\",base06:\"#00dd00\",base07:\"#00ff00\",base08:\"#007700\",base09:\"#009900\",base0A:\"#007700\",base0B:\"#00bb00\",base0C:\"#005500\",base0D:\"#009900\",base0E:\"#00bb00\",base0F:\"#005500\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"harmonic16\",author:\"jannik siebert (https://github.com/janniks)\",base00:\"#0b1c2c\",base01:\"#223b54\",base02:\"#405c79\",base03:\"#627e99\",base04:\"#aabcce\",base05:\"#cbd6e2\",base06:\"#e5ebf1\",base07:\"#f7f9fb\",base08:\"#bf8b56\",base09:\"#bfbf56\",base0A:\"#8bbf56\",base0B:\"#56bf8b\",base0C:\"#568bbf\",base0D:\"#8b56bf\",base0E:\"#bf568b\",base0F:\"#bf5656\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"hopscotch\",author:\"jan t. sott\",base00:\"#322931\",base01:\"#433b42\",base02:\"#5c545b\",base03:\"#797379\",base04:\"#989498\",base05:\"#b9b5b8\",base06:\"#d5d3d5\",base07:\"#ffffff\",base08:\"#dd464c\",base09:\"#fd8b19\",base0A:\"#fdcc59\",base0B:\"#8fc13e\",base0C:\"#149b93\",base0D:\"#1290bf\",base0E:\"#c85e7c\",base0F:\"#b33508\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"isotope\",author:\"jan t. sott\",base00:\"#000000\",base01:\"#404040\",base02:\"#606060\",base03:\"#808080\",base04:\"#c0c0c0\",base05:\"#d0d0d0\",base06:\"#e0e0e0\",base07:\"#ffffff\",base08:\"#ff0000\",base09:\"#ff9900\",base0A:\"#ff0099\",base0B:\"#33ff00\",base0C:\"#00ffff\",base0D:\"#0066ff\",base0E:\"#cc00ff\",base0F:\"#3300ff\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"marrakesh\",author:\"alexandre gavioli (http://github.com/alexx2/)\",base00:\"#201602\",base01:\"#302e00\",base02:\"#5f5b17\",base03:\"#6c6823\",base04:\"#86813b\",base05:\"#948e48\",base06:\"#ccc37a\",base07:\"#faf0a5\",base08:\"#c35359\",base09:\"#b36144\",base0A:\"#a88339\",base0B:\"#18974e\",base0C:\"#75a738\",base0D:\"#477ca1\",base0E:\"#8868b3\",base0F:\"#b3588e\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"mocha\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#3B3228\",base01:\"#534636\",base02:\"#645240\",base03:\"#7e705a\",base04:\"#b8afad\",base05:\"#d0c8c6\",base06:\"#e9e1dd\",base07:\"#f5eeeb\",base08:\"#cb6077\",base09:\"#d28b71\",base0A:\"#f4bc87\",base0B:\"#beb55b\",base0C:\"#7bbda4\",base0D:\"#8ab3b5\",base0E:\"#a89bb9\",base0F:\"#bb9584\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"monokai\",author:\"wimer hazenberg (http://www.monokai.nl)\",base00:\"#272822\",base01:\"#383830\",base02:\"#49483e\",base03:\"#75715e\",base04:\"#a59f85\",base05:\"#f8f8f2\",base06:\"#f5f4f1\",base07:\"#f9f8f5\",base08:\"#f92672\",base09:\"#fd971f\",base0A:\"#f4bf75\",base0B:\"#a6e22e\",base0C:\"#a1efe4\",base0D:\"#66d9ef\",base0E:\"#ae81ff\",base0F:\"#cc6633\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"ocean\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#2b303b\",base01:\"#343d46\",base02:\"#4f5b66\",base03:\"#65737e\",base04:\"#a7adba\",base05:\"#c0c5ce\",base06:\"#dfe1e8\",base07:\"#eff1f5\",base08:\"#bf616a\",base09:\"#d08770\",base0A:\"#ebcb8b\",base0B:\"#a3be8c\",base0C:\"#96b5b4\",base0D:\"#8fa1b3\",base0E:\"#b48ead\",base0F:\"#ab7967\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"paraiso\",author:\"jan t. sott\",base00:\"#2f1e2e\",base01:\"#41323f\",base02:\"#4f424c\",base03:\"#776e71\",base04:\"#8d8687\",base05:\"#a39e9b\",base06:\"#b9b6b0\",base07:\"#e7e9db\",base08:\"#ef6155\",base09:\"#f99b15\",base0A:\"#fec418\",base0B:\"#48b685\",base0C:\"#5bc4bf\",base0D:\"#06b6ef\",base0E:\"#815ba4\",base0F:\"#e96ba8\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"pop\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#000000\",base01:\"#202020\",base02:\"#303030\",base03:\"#505050\",base04:\"#b0b0b0\",base05:\"#d0d0d0\",base06:\"#e0e0e0\",base07:\"#ffffff\",base08:\"#eb008a\",base09:\"#f29333\",base0A:\"#f8ca12\",base0B:\"#37b349\",base0C:\"#00aabb\",base0D:\"#0e5a94\",base0E:\"#b31e8d\",base0F:\"#7a2d00\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"railscasts\",author:\"ryan bates (http://railscasts.com)\",base00:\"#2b2b2b\",base01:\"#272935\",base02:\"#3a4055\",base03:\"#5a647e\",base04:\"#d4cfc9\",base05:\"#e6e1dc\",base06:\"#f4f1ed\",base07:\"#f9f7f3\",base08:\"#da4939\",base09:\"#cc7833\",base0A:\"#ffc66d\",base0B:\"#a5c261\",base0C:\"#519f50\",base0D:\"#6d9cbe\",base0E:\"#b6b3eb\",base0F:\"#bc9458\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"shapeshifter\",author:\"tyler benziger (http://tybenz.com)\",base00:\"#000000\",base01:\"#040404\",base02:\"#102015\",base03:\"#343434\",base04:\"#555555\",base05:\"#ababab\",base06:\"#e0e0e0\",base07:\"#f9f9f9\",base08:\"#e92f2f\",base09:\"#e09448\",base0A:\"#dddd13\",base0B:\"#0ed839\",base0C:\"#23edda\",base0D:\"#3b48e3\",base0E:\"#f996e2\",base0F:\"#69542d\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"solarized\",author:\"ethan schoonover (http://ethanschoonover.com/solarized)\",base00:\"#002b36\",base01:\"#073642\",base02:\"#586e75\",base03:\"#657b83\",base04:\"#839496\",base05:\"#93a1a1\",base06:\"#eee8d5\",base07:\"#fdf6e3\",base08:\"#dc322f\",base09:\"#cb4b16\",base0A:\"#b58900\",base0B:\"#859900\",base0C:\"#2aa198\",base0D:\"#268bd2\",base0E:\"#6c71c4\",base0F:\"#d33682\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"summerfruit\",author:\"christopher corley (http://cscorley.github.io/)\",base00:\"#151515\",base01:\"#202020\",base02:\"#303030\",base03:\"#505050\",base04:\"#B0B0B0\",base05:\"#D0D0D0\",base06:\"#E0E0E0\",base07:\"#FFFFFF\",base08:\"#FF0086\",base09:\"#FD8900\",base0A:\"#ABA800\",base0B:\"#00C918\",base0C:\"#1faaaa\",base0D:\"#3777E6\",base0E:\"#AD00A1\",base0F:\"#cc6633\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"tomorrow\",author:\"chris kempson (http://chriskempson.com)\",base00:\"#1d1f21\",base01:\"#282a2e\",base02:\"#373b41\",base03:\"#969896\",base04:\"#b4b7b4\",base05:\"#c5c8c6\",base06:\"#e0e0e0\",base07:\"#ffffff\",base08:\"#cc6666\",base09:\"#de935f\",base0A:\"#f0c674\",base0B:\"#b5bd68\",base0C:\"#8abeb7\",base0D:\"#81a2be\",base0E:\"#b294bb\",base0F:\"#a3685a\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"london tube\",author:\"jan t. sott\",base00:\"#231f20\",base01:\"#1c3f95\",base02:\"#5a5758\",base03:\"#737171\",base04:\"#959ca1\",base05:\"#d9d8d8\",base06:\"#e7e7e8\",base07:\"#ffffff\",base08:\"#ee2e24\",base09:\"#f386a1\",base0A:\"#ffd204\",base0B:\"#00853e\",base0C:\"#85cebc\",base0D:\"#009ddc\",base0E:\"#98005d\",base0F:\"#b06110\"},e.exports=t.default},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"twilight\",author:\"david hart (http://hart-dev.com)\",base00:\"#1e1e1e\",base01:\"#323537\",base02:\"#464b50\",base03:\"#5f5a60\",base04:\"#838184\",base05:\"#a7a7a7\",base06:\"#c3c3c3\",base07:\"#ffffff\",base08:\"#cf6a4c\",base09:\"#cda869\",base0A:\"#f9ee98\",base0B:\"#8f9d6a\",base0C:\"#afc4db\",base0D:\"#7587a6\",base0E:\"#9b859d\",base0F:\"#9b703f\"},e.exports=t.default},function(e,t,n){var r=n(51);function a(e){var t=Math.round(r(e,0,255)).toString(16);return 1==t.length?\"0\"+t:t}e.exports=function(e){var t=4===e.length?a(255*e[3]):\"\";return\"#\"+a(e[0])+a(e[1])+a(e[2])+t}},function(e,t,n){var r=n(212),a=n(213),o=n(214),i=n(215);var u={\"#\":a,hsl:function(e){var t=r(e),n=i(t);return 4===t.length&&n.push(t[3]),n},rgb:o};function l(e){for(var t in u)if(0===e.indexOf(t))return u[t](e)}l.rgb=o,l.hsl=r,l.hex=a,e.exports=l},function(e,t,n){var r=n(80),a=n(51);function o(e,t){switch(e=parseFloat(e),t){case 0:return a(e,0,360);case 1:case 2:return a(e,0,100);case 3:return a(e,0,1)}}e.exports=function(e){return r(e).map(o)}},function(e,t){e.exports=function(e){4!==e.length&&5!==e.length||(e=function(e){for(var t=\"#\",n=1;n<e.length;n++){var r=e.charAt(n);t+=r+r}return t}(e));var t=[parseInt(e.substring(1,3),16),parseInt(e.substring(3,5),16),parseInt(e.substring(5,7),16)];if(9===e.length){var n=parseFloat((parseInt(e.substring(7,9),16)/255).toFixed(2));t.push(n)}return t}},function(e,t,n){var r=n(80),a=n(51);function o(e,t){return t<3?-1!=e.indexOf(\"%\")?Math.round(255*a(parseInt(e,10),0,100)/100):a(parseInt(e,10),0,255):a(parseFloat(e),0,1)}e.exports=function(e){return r(e).map(o)}},function(e,t){e.exports=function(e){var t,n,r,a,o,i=e[0]/360,u=e[1]/100,l=e[2]/100;if(0==u)return[o=255*l,o,o];t=2*l-(n=l<.5?l*(1+u):l+u-l*u),a=[0,0,0];for(var s=0;s<3;s++)(r=i+1/3*-(s-1))<0&&r++,r>1&&r--,o=6*r<1?t+6*(n-t)*r:2*r<1?n:3*r<2?t+(n-t)*(2/3-r)*6:t,a[s]=255*o;return a}},function(e,t,n){(function(t){var n=\"Expected a function\",r=9007199254740991,a=\"[object Arguments]\",o=\"[object Function]\",i=\"[object GeneratorFunction]\",u=\"object\"==typeof t&&t&&t.Object===Object&&t,l=\"object\"==typeof self&&self&&self.Object===Object&&self,s=u||l||Function(\"return this\")();function c(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function f(e,t){for(var n=-1,r=t.length,a=e.length;++n<r;)e[a+n]=t[n];return e}var d=Object.prototype,p=d.hasOwnProperty,b=d.toString,h=s.Symbol,m=d.propertyIsEnumerable,y=h?h.isConcatSpreadable:void 0,v=Math.max;function g(e){return w(e)||function(e){return function(e){return function(e){return!!e&&\"object\"==typeof e}(e)&&function(e){return null!=e&&function(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=r}(e.length)&&!function(e){var t=function(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}(e)?b.call(e):\"\";return t==o||t==i}(e)}(e)}(e)&&p.call(e,\"callee\")&&(!m.call(e,\"callee\")||b.call(e)==a)}(e)||!!(y&&e&&e[y])}var w=Array.isArray;var x=function(e){return t=function(t){var r=(t=function e(t,n,r,a,o){var i=-1,u=t.length;for(r||(r=g),o||(o=[]);++i<u;){var l=t[i];n>0&&r(l)?n>1?e(l,n-1,r,a,o):f(o,l):a||(o[o.length]=l)}return o}(t,1)).length,a=r;for(e&&t.reverse();a--;)if(\"function\"!=typeof t[a])throw new TypeError(n);return function(){for(var e=0,n=r?t[e].apply(this,arguments):arguments[0];++e<r;)n=t[e].call(this,n);return n}},r=v(void 0===r?t.length-1:r,0),function(){for(var e=arguments,n=-1,a=v(e.length-r,0),o=Array(a);++n<a;)o[n]=e[r+n];n=-1;for(var i=Array(r+1);++n<r;)i[n]=e[n];return i[r]=o,c(t,this,i)};var t,r}();e.exports=x}).call(this,n(79))},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.yuv2rgb=function(e){var t,n,r,a=e[0],o=e[1],i=e[2];return t=1*a+0*o+1.13983*i,n=1*a+-.39465*o+-.5806*i,r=1*a+2.02311*o+0*i,t=Math.min(Math.max(0,t),1),n=Math.min(Math.max(0,n),1),r=Math.min(Math.max(0,r),1),[255*t,255*n,255*r]},t.rgb2yuv=function(e){var t=e[0]/255,n=e[1]/255,r=e[2]/255;return[.299*t+.587*n+.114*r,-.14713*t+-.28886*n+.436*r,.615*t+-.51499*n+-.10001*r]}},function(e,t,n){\"use strict\";t.__esModule=!0,t.default={scheme:\"solarized\",author:\"ethan schoonover (http://ethanschoonover.com/solarized)\",base00:\"#002b36\",base01:\"#073642\",base02:\"#586e75\",base03:\"#657b83\",base04:\"#839496\",base05:\"#93a1a1\",base06:\"#eee8d5\",base07:\"#fdf6e3\",base08:\"#dc322f\",base09:\"#cb4b16\",base0A:\"#b58900\",base0B:\"#859900\",base0C:\"#2aa198\",base0D:\"#268bd2\",base0E:\"#6c71c4\",base0F:\"#d33682\"}}]]);\n//# sourceMappingURL=2.b28c1fbe.chunk.js.map"
  },
  {
    "path": "packages/ui/build/static/js/main.ef43f0f5.chunk.js",
    "content": "(this[\"webpackJsonp@agreed/ui\"]=this[\"webpackJsonp@agreed/ui\"]||[]).push([[0],{109:function(e,t,a){},110:function(e,t,a){},111:function(e,t,a){},112:function(e,t,a){},219:function(e,t,a){},220:function(e,t,a){},221:function(e,t,a){},222:function(e,t,a){\"use strict\";a.r(t);var n=a(0),r=a.n(n),c=a(81),l=a.n(c),o=(a(91),a(25)),s=a(26),u=a(28),i=a(27),m=a(29),d=a(82),p=a(83),h=a.n(p),f=(a(109),a(19)),E=a(85);a(110),a(111);var g=function(e){var t=e.method.toLowerCase();return r.a.createElement(\"span\",{className:\"method \".concat(t)},t.toUpperCase())},b=\"__AGREED-UI-MARKER__\",v=function(e){var t=e.status;return r.a.createElement(\"span\",{className:\"statusLabel statusLabel--\".concat(Math.floor(t/100))},t)},y=function(e){var t=e.agree;return r.a.createElement(\"p\",null,r.a.createElement(\"a\",{href:\"#\".concat(t.id)},r.a.createElement(g,{method:t.request.method}),r.a.createElement(\"span\",null,t.title||t.request.path)))},O=function(e){var t=e.agree;return r.a.createElement(\"p\",null,r.a.createElement(\"a\",{href:\"#\".concat(t.id)},r.a.createElement(v,{status:t.response.status}),r.a.createElement(\"span\",null,t.title||\"no title\")))},j=function(e){var t=e.path,a=e.agrees,n=t.split(b),c=Object(f.a)(n,2),l=c[0],o=c[1];return r.a.createElement(\"details\",{open:!0},r.a.createElement(\"summary\",null,r.a.createElement(g,{method:o}),r.a.createElement(\"span\",null,l),a.length>1&&r.a.createElement(\"span\",{className:\"count\"},a.length)),a.map((function(e){return r.a.createElement(O,{key:e.id,agree:e})})))},k=function(e){var t=function(e){for(var t={},a=0,n=e.length;a<n;a++){var r=e[a],c=\"\".concat(r.request.path).concat(b).concat(r.request.method);t[c]=[].concat(Object(E.a)(t[c]||[]),[r])}return t}(e.agrees),a=Object.keys(t);return r.a.createElement(r.a.Fragment,null,a.map((function(e){return r.a.createElement(j,{key:e,path:e,agrees:t[e]})})))};var N=function(e){var t=e.agrees,a=e.grouped;return r.a.createElement(\"nav\",null,a?r.a.createElement(k,{agrees:t}):t.map((function(e,t){return r.a.createElement(y,{key:t,agree:e})})))},w=(a(112),function(e){var t=e.title,a=e.description,n=e.children;return r.a.createElement(\"section\",{className:\"definitions\"},r.a.createElement(\"h1\",null,t),a&&r.a.createElement(\"p\",null,a),n)}),C=a(52),S=a.n(C),q=a(84),_=a.n(q),T=(a(219),function(e){function t(e){var a;return Object(o.a)(this,t),(a=Object(u.a)(this,Object(i.a)(t).call(this,e))).state={selected:\"body\"},a}return Object(m.a)(t,e),Object(s.a)(t,[{key:\"onClick\",value:function(e){this.setState({selected:e})}},{key:\"render\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,a=t.formatted,n=t.schema,c=t.flowtype,l=this.state.selected;return r.a.createElement(\"section\",{className:\"body\"},r.a.createElement(\"div\",{className:\"buttonGroup\"},r.a.createElement(\"button\",{className:_()(\"tabButton\",{onlyButton:!n}),onClick:function(){return e.onClick(\"body\")},disabled:\"body\"===l},\"body\"),n&&r.a.createElement(\"button\",{className:\"tabButton\",onClick:function(){return e.onClick(\"schema\")},disabled:\"schema\"===l},\"schema\"),c&&r.a.createElement(\"button\",{className:\"tabButton\",onClick:function(){return e.onClick(\"flowtype\")},disabled:\"flowtype\"===l},\"flowtype\")),\"schema\"===l&&r.a.createElement(\"div\",{className:\"code\"},r.a.createElement(S.a,{data:n,shouldExpandNode:function(e,t,a){return a<2}})),\"flowtype\"===l&&r.a.createElement(\"pre\",{className:\"code\"},c),\"body\"===l&&r.a.createElement(\"div\",{className:\"code\"},a instanceof Object?r.a.createElement(S.a,{data:a,shouldExpandNode:function(e,t,a){return a<2}}):a))}}]),t}(n.Component)),P=function(e){var t=e.data,a=t.method,n=t.path,c=t.headers_formatted,l=t.query,o=t.formatted,s=t.schema;return r.a.createElement(\"div\",null,r.a.createElement(w,{title:\"method\",description:a.toUpperCase()}),r.a.createElement(w,{title:\"path\",description:n}),l&&!!Object.keys(l).length&&r.a.createElement(w,{title:\"query\"},Object.entries(l).map((function(e){var t=Object(f.a)(e,2),a=t[0],n=t[1];return r.a.createElement(\"dl\",{key:a},r.a.createElement(\"dt\",null,a),r.a.createElement(\"dd\",null,JSON.stringify(n)))}))),c&&!!Object.keys(c).length&&r.a.createElement(w,{title:\"headers\"},Object.entries(c).map((function(e){var t=Object(f.a)(e,2),a=t[0],n=t[1];return r.a.createElement(\"dl\",{key:a},r.a.createElement(\"dt\",null,a),r.a.createElement(\"dd\",null,JSON.stringify(n)))}))),o&&r.a.createElement(T,{formatted:o,schema:s}))},x=function(e){var t=e.data,a=t.status,n=t.formatted,c=t.schema,l=t.flowtype;return r.a.createElement(\"div\",null,r.a.createElement(w,{title:\"statusCode\",description:\"\".concat(a)}),n&&r.a.createElement(T,{formatted:n,schema:c,flowtype:l}))},A=(a(220),function(e){var t=e.agree,a=t.request.path,n=t.response.status;return r.a.createElement(\"section\",{className:\"agree\",id:t.id},r.a.createElement(\"h1\",{className:\"title\"},r.a.createElement(g,{method:t.request.method,status:n}),t.title||a),r.a.createElement(\"div\",{className:\"description\"},t.description||\"no description.\"),r.a.createElement(\"h2\",null,\"Request\"),r.a.createElement(P,{data:t.request}),r.a.createElement(\"h2\",null,\"Response\"),r.a.createElement(x,{data:t.response}))});a(221);var I=function(e){var t=e.agrees;return r.a.createElement(\"div\",{className:\"contents\"},t.map((function(e){return r.a.createElement(A,{key:e.id,agree:e})})))};function R(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}var D=function(e,t){if(!e)return null;var a=F(e);return t.filter((function(e){return a(e.title)||a(e.request.path)||a(e.request.method)}))},F=function(e){return function(t){return t&&t.indexOf(e)>-1}},B=function(e){return e.map((function(e,t){return function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?R(a,!0).forEach((function(t){Object(d.a)(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):R(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},e,{id:\"agree_\".concat(t)})}))},L=function(e){function t(e){var a;return Object(o.a)(this,t),(a=Object(u.a)(this,Object(i.a)(t).call(this,e))).defaultTitle=\"Agreed UI\",a.state={agrees:null,search:\"\",grouped:!1,agreesFiltered:null,title:\"\"},a}return Object(m.a)(t,e),Object(s.a)(t,[{key:\"componentDidMount\",value:function(){var e=this,t='\"<%= title %>\"'===window.TITLE?\"\":window.TITLE||\"\",a=\"true\"===localStorage.getItem(\"grouped\")||this.state.grouped;if(t&&(document.title=t),Array.isArray(window.AGREES))return this.setState({title:t,grouped:a,agrees:B(window.AGREES)});h.a.get(\"agrees\").then((function(n){var r=n.data;return e.setState({title:t,grouped:a,agrees:B(r)})}))}},{key:\"onSearchTextChange\",value:function(e){this.setState({search:e,agreesFiltered:D(e,this.state.agrees)})}},{key:\"onFilterChange\",value:function(e){localStorage.setItem(\"grouped\",e),this.setState({grouped:e})}},{key:\"render\",value:function(){var e=this,t=this.state,a=t.agrees,n=t.agreesFiltered,c=t.title,l=t.search,o=t.grouped;return a?r.a.createElement(\"div\",{className:\"wrap\"},r.a.createElement(\"header\",null,r.a.createElement(\"h1\",null,c||this.defaultTitle),c&&r.a.createElement(\"p\",null,this.defaultTitle)),r.a.createElement(\"div\",{className:\"container\"},r.a.createElement(\"main\",null,r.a.createElement(I,{agrees:n||a})),r.a.createElement(\"aside\",null,r.a.createElement(\"p\",null,\"Navigations\"),r.a.createElement(\"section\",{className:\"search\"},r.a.createElement(\"input\",{type:\"search\",className:\"search__input\",placeholder:\"Search\",value:l,onChange:function(t){return e.onSearchTextChange(t.target.value)}}),r.a.createElement(\"span\",{className:\"search__group\"},r.a.createElement(\"label\",null,r.a.createElement(\"input\",{type:\"checkbox\",checked:o,onChange:function(t){return e.onFilterChange(t.target.checked)}}),\"\\xa0group by request.path\"))),r.a.createElement(N,{grouped:o,agrees:n||a})))):null}}]),t}(n.Component);l.a.render(r.a.createElement(L,null),document.getElementById(\"root\"))},86:function(e,t,a){e.exports=a(222)},91:function(e,t,a){}},[[86,1,2]]]);\n//# sourceMappingURL=main.ef43f0f5.chunk.js.map"
  },
  {
    "path": "packages/ui/build/static/js/runtime-main.3336eaa2.js",
    "content": "!function(e){function r(r){for(var n,i,l=r[0],a=r[1],f=r[2],c=0,s=[];c<l.length;c++)i=l[c],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var a=t[l];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){\"undefined\"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&\"object\"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&r&&\"string\"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,\"a\",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p=\"./\";var l=this[\"webpackJsonp@agreed/ui\"]=this[\"webpackJsonp@agreed/ui\"]||[],a=l.push.bind(l);l.push=r,l=l.slice();for(var f=0;f<l.length;f++)r(l[f]);var p=a;t()}([]);\n//# sourceMappingURL=runtime-main.3336eaa2.js.map"
  },
  {
    "path": "packages/ui/package.json",
    "content": "{\n  \"name\": \"@agreed/ui\",\n  \"version\": \"6.0.0\",\n  \"license\": \"MIT\",\n  \"proxy\": \"http://localhost:3001/\",\n  \"scripts\": {\n    \"start\": \"node server/index.js\",\n    \"start:dev\": \"npm run start:dev:server & npm run start -- --port 3001\",\n    \"start:dev:server\": \"react-scripts start\",\n    \"build\": \"node scripts/build.js\",\n    \"build:dev\": \"PUBLIC_URL=./ react-scripts build\",\n    \"lint\": \"eslint -c .eslintrc.json 'src/**/*.js' --fix\",\n    \"lintfix\": \"eslint -c .eslintrc.json 'src/**/*.js' --fix\"\n  },\n  \"bin\": {\n    \"agreed-ui\": \"bin/agreed-ui.js\"\n  },\n  \"homepage\": \"https://github.com/recruit-tech/agreed-ui\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/recruit-tech/agreed.git\"\n  },\n  \"dependencies\": {\n    \"@agreed/core\": \"^6.0.0\",\n    \"@babel/plugin-proposal-private-property-in-object\": \"^7.21.11\",\n    \"colo\": \"1.0.0\",\n    \"express\": \"4.18.2\",\n    \"fs-extra\": \"11.1.0\",\n    \"json-schema-to-flow-type\": \"1.0.0\",\n    \"lodash.template\": \"4.5.0\",\n    \"minimist\": \"1.2.8\",\n    \"serialize-javascript\": \"6.0.1\"\n  },\n  \"devDependencies\": {\n    \"@babel/eslint-parser\": \"^7.23.10\",\n    \"@babel/preset-react\": \"^7.23.3\",\n    \"axios\": \"0.27.2\",\n    \"classnames\": \"2.3.1\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-prettier\": \"8.7.0\",\n    \"eslint-plugin-prettier\": \"4.2.1\",\n    \"eslint-plugin-react\": \"7.30.0\",\n    \"prettier\": \"2.8.4\",\n    \"prop-types\": \"15.8.1\",\n    \"react\": \"18.2.0\",\n    \"react-dom\": \"18.2.0\",\n    \"react-json-tree\": \"0.18.0\",\n    \"react-scripts\": \"5.0.1\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"description\": \"UI for [Agreed](https://www.npmjs.com/package/agreed-core)\",\n  \"bugs\": {\n    \"url\": \"https://github.com/recruit-tech/agreed/issues\"\n  },\n  \"main\": \"index.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"keywords\": [\n    \"agreed\",\n    \"ui\"\n  ],\n  \"author\": \"yosuke-furukawa\"\n}\n"
  },
  {
    "path": "packages/ui/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"theme-color\" content=\"#000000\">\n    <!--\n      manifest.json provides metadata used when your web app is added to the\n      homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\">\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.png\">\n    <title>Agreed UI</title>\n  </head>\n  <body>\n    <noscript>\n      You need to enable JavaScript to run this app.\n    </noscript>\n    <div id=\"root\"></div>\n    <script>\n      window.TITLE = '\"<\\%= title \\%>\"';\n      window.AGREES = \"<\\%= agrees \\%>\";\n    </script>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "packages/ui/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\"\n  ]\n}\n"
  },
  {
    "path": "packages/ui/scripts/build.js",
    "content": "const fs = require('fs')\nconst fse = require('fs-extra')\nconst path = require('path')\nconst minimist = require('minimist')\nconst serialize = require('serialize-javascript')\nconst template = require('lodash.template')\n\nconst argv = minimist(process.argv.slice(2))\nconst getAgreements = require('../server/lib/getAgreements')\n\nconst agreesPath = argv.path\nconst agrees = getAgreements({ path: agreesPath })\nconst serialized = serialize(agrees)\n\nconst srcPath = path.resolve(__dirname, '../build/index.html')\nconst destPath = path.resolve(argv.dest, 'index.html')\n\nconst html = fs.readFileSync(srcPath, 'utf8')\n\nfse.copySync(path.dirname(srcPath), path.dirname(destPath))\n\nfs.writeFileSync(\n  destPath,\n  template(html, { interpolate: /\"<%=([\\s\\S]+?)%>\"/g })({\n    agrees: serialized,\n    title: argv.title,\n  }),\n)\n"
  },
  {
    "path": "packages/ui/server/index.js",
    "content": "const fs = require('fs')\nconst path = require('path')\nconst minimist = require('minimist')\nconst serialize = require('serialize-javascript')\nconst express = require('express')\nconst template = require('lodash.template')\n\nconst argv = minimist(process.argv.slice(2))\nconst getAgreements = require('./lib/getAgreements')\n\nconst port = parseInt(argv.port, 10) || 3000\nconst agreesPath = argv.path\n\nconst app = express()\n\napp.get('/agrees', (req, res) => {\n  const agrees = getAgreements({ path: agreesPath })\n  res.send(agrees)\n})\n\napp.get('/', (req, res) => {\n  const agrees = getAgreements({ path: agreesPath })\n  const serialized = serialize(agrees)\n\n  const srcPath = path.resolve(__dirname, '../build/index.html')\n  const html = fs.readFileSync(srcPath, 'utf8')\n  res.send(\n    template(html, { interpolate: /\"<%=([\\s\\S]+?)%>\"/g })({\n      agrees: serialized,\n      title: argv.title\n    })\n  )\n})\n\napp.use(express.static(path.resolve(__dirname, '../build')))\n\napp.listen(port, (err) => {\n  if (err) throw err\n  console.log(`> Ready on http://localhost:${port}`) // eslint-disable-line\n})\n"
  },
  {
    "path": "packages/ui/server/lib/getAgreements.js",
    "content": "'use strict'\n\nconst path = require('path')\nconst register = require('@agreed/core/lib/register')\nconst completion = require('@agreed/core/lib/check/completion')\nconst requireUncached = require('@agreed/core/lib/require_hook/requireUncached')\nconst format = require('@agreed/core/lib/template/format')\nconst { parseSchema } = require('json-schema-to-flow-type')\n\nmodule.exports = function (options) {\n  console.log(options)\n  const agreesPath = path.resolve(options.path)\n  const base = path.dirname(agreesPath)\n\n  register()\n  const agrees = [].concat(requireUncached(agreesPath))\n\n  return agrees\n    .map((agree) => completion(agree, base))\n    .map((agree) => {\n      agree.request.headers_formatted = format(agree.request.headers, agree.request.values)\n      agree.request.formatted = format(agree.request.body, agree.request.values)\n\n      agree.response.formatted = format(agree.response.body, agree.response.values)\n\n      if (agree.response.schema) {\n        agree.response.flowtype = parseSchema(agree.response.schema)\n      }\n\n      return agree\n    })\n}\n"
  },
  {
    "path": "packages/ui/src/components/Agree/index.js",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\nimport Request from '../Request'\nimport Response from '../Response'\nimport MethodLabel from '../MethodLabel'\nimport './styles.css'\n\nconst Agree = ({ agree }) => {\n  const path = agree.request.path\n  const status = agree.response.status\n  return (\n    <section className=\"agree\" id={agree.id}>\n      <h1 className=\"title\">\n        <MethodLabel method={agree.request.method} status={status} />\n        {agree.title || path}\n      </h1>\n      <div className=\"description\">{agree.description || 'no description.'}</div>\n\n      <h2>Request</h2>\n      <Request data={agree.request} />\n      <h2>Response</h2>\n      <Response data={agree.response} />\n    </section>\n  )\n}\n\nAgree.propTypes = {\n  agree: PropTypes.object.isRequired\n}\n\nexport default Agree\n"
  },
  {
    "path": "packages/ui/src/components/Agree/styles.css",
    "content": ".contents > .agree {\n  padding-top: 2rem;\n  margin-bottom: 2rem;\n}\n\n.contents > .agree:first-child {\n  padding-top: 0;\n}\n\n.agree > h1,\n.agree > h2,\n.agree > section,\n.agree .description,\n.agree .definitions {\n  padding: 0 30px;\n}\n\n.agree h2 {\n  color: var(--color);\n  border-left: 2px #aaa solid;\n  padding-left: 28px;\n}\n\n.title {\n  align-items: center;\n  border-left: 2px var(--color) solid;\n  display: flex;\n  font-family: 'Open Sans', sans-serif;\n  font-style: italic;\n  margin: 0 0 0 0;\n}\n\n.title > * {\n  margin-right: 0.6rem;\n}\n\n.description {\n  color: var(--color1);\n  margin: 0.25rem 0;\n}\n\n"
  },
  {
    "path": "packages/ui/src/components/Agrees/index.js",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\nimport Agree from '../Agree'\nimport './styles.css'\n\nfunction Agrees({ agrees }) {\n  return (\n    <div className=\"contents\">\n      {agrees.map((agree) => (\n        <Agree key={agree.id} agree={agree} />\n      ))}\n    </div>\n  )\n}\n\nAgrees.propTypes = {\n  agrees: PropTypes.array.isRequired\n}\n\nexport default Agrees\n"
  },
  {
    "path": "packages/ui/src/components/Agrees/styles.css",
    "content": ".contents section h2 {\n  color: var(--color);\n  border-left: 2px #aaa solid;\n  padding-left: 28px;\n}\n\n.contents {\n  position: absolute;\n  width: 100%;\n}\n\n\n"
  },
  {
    "path": "packages/ui/src/components/App/App.test.js",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\n\nit('renders without crashing', () => {\n  const div = document.createElement('div')\n  ReactDOM.render(<App />, div)\n  ReactDOM.unmountComponentAtNode(div)\n})\n"
  },
  {
    "path": "packages/ui/src/components/App/index.js",
    "content": "import React, { Component } from 'react'\nimport axios from 'axios'\nimport './styles.css'\n\nimport Navigation from '../Navigation'\nimport Agrees from '../Agrees'\n\nconst titlePlaceHolder = '\"<%= title %>\"'\n\nconst filterAgrees = (search, agrees) => {\n  if (!search) return null\n\n  const check = shoudDisplay(search)\n\n  return agrees.filter(\n    (agree) => check(agree.title) || check(agree.request.path) || check(agree.request.method)\n  )\n}\n\nconst shoudDisplay = (search) => (value) => value && value.indexOf(search) > -1\n\nconst insertId = (agrees) => agrees.map((agree, i) => ({ ...agree, id: `agree_${i}` }))\n\nclass App extends Component {\n  constructor(props) {\n    super(props)\n    this.state = {\n      agrees: null,\n      search: '',\n      grouped: false,\n      agreesFiltered: null,\n      title: ''\n    }\n  }\n\n  defaultTitle = 'Agreed UI'\n\n  componentDidMount() {\n    const title = window.TITLE === titlePlaceHolder ? '' : window.TITLE || ''\n\n    const grouped = localStorage.getItem('grouped') === 'true' || this.state.grouped\n\n    if (title) document.title = title\n\n    if (Array.isArray(window.AGREES)) {\n      return this.setState({ title, grouped, agrees: insertId(window.AGREES) })\n    }\n\n    axios\n      .get('agrees')\n      .then(({ data }) => this.setState({ title, grouped, agrees: insertId(data) }))\n  }\n\n  onSearchTextChange(value) {\n    this.setState({\n      search: value,\n      agreesFiltered: filterAgrees(value, this.state.agrees)\n    })\n  }\n\n  onFilterChange(value) {\n    localStorage.setItem('grouped', value)\n    this.setState({\n      grouped: value\n    })\n  }\n\n  render() {\n    const { agrees, agreesFiltered, title, search, grouped } = this.state\n    if (!agrees) return null\n\n    return (\n      <div className=\"wrap\">\n        <header>\n          <h1>{title || this.defaultTitle}</h1>\n          {title && <p>{this.defaultTitle}</p>}\n        </header>\n        <div className=\"container\">\n          <main>\n            <Agrees agrees={agreesFiltered || agrees} />\n          </main>\n          <aside>\n            <p>Navigations</p>\n            <section className=\"search\">\n              <input\n                type=\"search\"\n                className=\"search__input\"\n                placeholder=\"Search\"\n                value={search}\n                onChange={(e) => this.onSearchTextChange(e.target.value)}\n              />\n              <span className=\"search__group\">\n                <label>\n                  <input\n                    type=\"checkbox\"\n                    checked={grouped}\n                    onChange={(e) => this.onFilterChange(e.target.checked)}\n                  />\n                  &nbsp;group by request.path\n                </label>\n              </span>\n            </section>\n            <Navigation grouped={grouped} agrees={agreesFiltered || agrees} />\n          </aside>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default App\n"
  },
  {
    "path": "packages/ui/src/components/App/styles.css",
    "content": ".wrap {\n  align-items: stretch;\n  display: flex;\n  flex-direction: column;\n  height: 100vh;\n}\n\nheader {\n  align-items: center;\n  background: white;\n  box-shadow: 0 0 2.25rem #9da5ab;\n  display: flex;\n  font-family: 'PT Sans', sans-serif;\n  justify-content: space-between;\n  padding: 20px;\n  position: relative;\n  z-index: 1;\n}\n\nheader h1 {\n  margin: 0;\n}\n\nheader p {\n  font-weight: bold;\n}\n\n.container {\n  align-items: stretch;\n  display: flex;\n  flex: 1;\n}\n\nmain {\n  flex-grow: 3;\n  order: 2;\n  padding: 20px 0;\n  overflow: auto;\n  position: relative;\n}\n\naside {\n  box-shadow: 0 0 0.5rem #9da5ab;\n  font-weight: 300;\n  flex: 1;\n  order: 1;\n  overflow: auto;\n  padding: 20px;\n  position: relative;\n  min-width: 300px;\n}\n\n.search {\n  margin: 1rem 0;\n}\n\n.search__input {\n  border: none;\n  border-bottom: 2px solid #ddd;\n  font-size: 1rem;\n  font-weight: 300;\n  padding: 0.5rem 0;\n  transition: border-color 0.1s ease-out;\n  width: 80%;\n}\n\n.search__input:focus {\n  outline: 0;\n  display: block;\n  border-bottom: 2px solid var(--color5);\n}\n\n.search__group {\n  display: block;\n  font-size: 0.9rem;\n  margin-top: 5px;\n}\n\n\n"
  },
  {
    "path": "packages/ui/src/components/Body/index.js",
    "content": "import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { JSONTree } from 'react-json-tree'\nimport classNames from 'classnames'\nimport './styles.css'\n\nclass Body extends Component {\n  constructor(props) {\n    super(props)\n    this.state = { selected: 'body' }\n  }\n\n  onClick(selected) {\n    this.setState({ selected })\n  }\n\n  render({ formatted, schema, flowtype } = this.props) {\n    const { selected } = this.state\n    return (\n      <section className=\"body\">\n        <div className=\"buttonGroup\">\n          <button\n            className={classNames('tabButton', {\n              onlyButton: !schema\n            })}\n            onClick={() => this.onClick('body')}\n            disabled={selected === 'body'}>\n            body\n          </button>\n          {schema && (\n            <button\n              className=\"tabButton\"\n              onClick={() => this.onClick('schema')}\n              disabled={selected === 'schema'}>\n              schema\n            </button>\n          )}\n          {flowtype && (\n            <button\n              className=\"tabButton\"\n              onClick={() => this.onClick('flowtype')}\n              disabled={selected === 'flowtype'}>\n              flowtype\n            </button>\n          )}\n        </div>\n        {selected === 'schema' && (\n          <div className=\"code\">\n            <JSONTree data={schema} shouldExpandNode={(keyName, data, level) => level < 2} />\n          </div>\n        )}\n        {selected === 'flowtype' && <pre className=\"code\">{flowtype}</pre>}\n        {selected === 'body' && (\n          <div className=\"code\">\n            {formatted instanceof Object ? (\n              <JSONTree data={formatted} shouldExpandNode={(keyName, data, level) => level < 2} />\n            ) : (\n              formatted\n            )}\n          </div>\n        )}\n      </section>\n    )\n  }\n}\n\nBody.propTypes = {\n  formatted: PropTypes.any.isRequired,\n  schema: PropTypes.object,\n  flowtype: PropTypes.any\n}\n\nexport default Body\n"
  },
  {
    "path": "packages/ui/src/components/Body/styles.css",
    "content": "button {\n  background-color: transparent;\n  border: none;\n  cursor: pointer;\n  outline: none;\n  padding: 0;\n  appearance: none;\n}\n\n.body {\n  color: var(--color1);\n  padding: 0;\n}\n\n.body > .buttonGroup {\n  margin-bottom: 1em;\n  padding: 0 30px;\n}\n\n.body > .code {\n  background: #efefef;\n  font-weight: 300;\n  font-size: 0.9rem;\n  max-height: 500px;\n  margin: 1em 0;\n  overflow: auto;\n  padding: 2em 2em;\n}\n\n.body > .code ul {\n  background: #efefef !important;\n}\n\n.buttonGroup button {\n  margin-right: 1em;\n}\n\n.tabButton {\n  box-sizing: border-box;\n  color: var(--color5);\n  opacity: 0.4;\n  font-size: 1rem;\n  font-weight: bold;\n  padding: 0 1px 3px;\n}\n\n.tabButton:hover {\n  opacity: 1;\n}\n\n.tabButton:disabled {\n  color: var(--color5);\n  cursor: initial;\n  opacity: 1;\n  border-bottom: 2px solid var(--color5);\n}\n\n.onlyButton.tabButton:disabled {\n  border: none;\n}\n"
  },
  {
    "path": "packages/ui/src/components/Definitions/index.js",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\nimport './styles.css'\n\nconst Definitions = ({ title, description, children }) => {\n  return (\n    <section className=\"definitions\">\n      <h1>{title}</h1>\n      {description && <p>{description}</p>}\n      {children}\n    </section>\n  )\n}\n\nDefinitions.propTypes = {\n  title: PropTypes.string.isRequired,\n  description: PropTypes.string,\n  children: PropTypes.any\n}\n\nexport default Definitions\n"
  },
  {
    "path": "packages/ui/src/components/Definitions/styles.css",
    "content": ".definitions {\n  color: var(--color1);\n  margin: 1.5em 0;\n}\n\n.definitions h1 {\n  font-size: 1em;\n  color: var(--color5);\n  margin-top: 0;\n  margin-bottom: 1em;\n  padding-left: 0;\n}\n\n.definitions > p,\n.definitions > dl {\n  margin: 0.25em 1em;\n}\n\n.definitions dl dt {\n  color: var(--color3);\n  font-weight: bold;\n  font-style: italic;\n}\n\n.definitions dl dt:after {\n  content: ': ';\n}\n\n.definitions dl > * {\n  display: inline-block;\n  margin-right: 0.5em;\n}\n"
  },
  {
    "path": "packages/ui/src/components/JsonSchemaViewer/index.js",
    "content": "import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport JSONSchemaView from 'json-schema-view-js'\nimport 'json-schema-view-js/dist/style.css'\nimport './styles.css'\n\nclass JsonSchemaViewer extends Component {\n  mountViewer(el, schema) {\n    el.appendChild(new JSONSchemaView(schema, 1).render())\n  }\n\n  render({ schema } = this.props) {\n    return (\n      <div\n        className=\"schemaViewer\"\n        ref={(el) => {\n          if (el) this.mountViewer(el, schema)\n        }}\n      />\n    )\n  }\n}\n\nJsonSchemaViewer.propTypes = {\n  schema: PropTypes.object\n}\n\nexport default JsonSchemaViewer\n"
  },
  {
    "path": "packages/ui/src/components/JsonSchemaViewer/styles.css",
    "content": ".schemaViewer {\n  opacity: 0.6;\n}\n"
  },
  {
    "path": "packages/ui/src/components/MethodLabel/index.js",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\nimport './styles.css'\n\nfunction MethodLabel({ method }) {\n  const m = method.toLowerCase()\n  return <span className={`method ${m}`}>{m.toUpperCase()}</span>\n}\n\nMethodLabel.propTypes = {\n  method: PropTypes.string.isRequired\n}\n\nexport default MethodLabel\n"
  },
  {
    "path": "packages/ui/src/components/MethodLabel/styles.css",
    "content": ".method {\n  margin-right: 5px;\n  font-size: 12px;\n  font-weight: 300;\n  font-style: normal;\n  border: 1px solid #999;\n  color: #999;\n  border-radius: 2px;\n  padding: 2px 3px;\n  display: inline-block;\n}\n.method.get {\n  color: #66BB6A;\n  border-color: #66BB6A;\n}\n.method.delete {\n  color: #999;\n  border-color: #999;\n}\n.method.put { \n  color: #9E9D24;\n  border-color: #9E9D24;\n}\n.method.post {\n  color: #F9A825;\n  border-color: #F9A825;\n}\n.method.patch {\n  color: #9C27B0;\n  border-color: #9C27B0;\n}\n"
  },
  {
    "path": "packages/ui/src/components/Navigation/index.js",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\nimport './styles.css'\nimport MethodLabel from '../MethodLabel'\n\nconst MARKER = '__AGREED-UI-MARKER__'\n\nconst groupByRequestPath = (list) => {\n  const ret = {}\n  for (let i = 0, len = list.length; i < len; i++) {\n    const item = list[i]\n    const key = `${item.request.path}${MARKER}${item.request.method}`\n    ret[key] = [...(ret[key] || []), item]\n  }\n  return ret\n}\n\nconst StatusLabel = ({ status }) => (\n  <span className={`statusLabel statusLabel--${Math.floor(status / 100)}`}>{status}</span>\n)\n\nStatusLabel.propTypes = {\n  status: PropTypes.number.isRequired\n}\n\nconst NaviItem = ({ agree }) => (\n  <p>\n    <a href={`#${agree.id}`}>\n      <MethodLabel method={agree.request.method} />\n      <span>{agree.title || agree.request.path}</span>\n    </a>\n  </p>\n)\n\nNaviItem.propTypes = {\n  agree: PropTypes.object.isRequired\n}\n\nconst GroupedItem = ({ agree }) => (\n  <p>\n    <a href={`#${agree.id}`}>\n      <StatusLabel status={agree.response.status} />\n      <span>{agree.title || 'no title'}</span>\n    </a>\n  </p>\n)\n\nGroupedItem.propTypes = {\n  agree: PropTypes.object.isRequired\n}\n\nconst Details = ({ path, agrees }) => {\n  const [name, method] = path.split(MARKER)\n  return (\n    <details open>\n      <summary>\n        <MethodLabel method={method} />\n        <span>{name}</span>\n        {agrees.length > 1 && <span className=\"count\">{agrees.length}</span>}\n      </summary>\n      {agrees.map((agree) => (\n        <GroupedItem key={agree.id} agree={agree} />\n      ))}\n    </details>\n  )\n}\n\nDetails.propTypes = {\n  path: PropTypes.string.isRequired,\n  agrees: PropTypes.array.isRequired\n}\n\nconst Grouped = ({ agrees }) => {\n  const grouped = groupByRequestPath(agrees)\n  const pathList = Object.keys(grouped)\n  return (\n    <React.Fragment>\n      {pathList.map((path) => (\n        <Details key={path} path={path} agrees={grouped[path]} />\n      ))}\n    </React.Fragment>\n  )\n}\n\nGrouped.propTypes = {\n  agrees: PropTypes.array.isRequired\n}\n\nfunction Navigation({ agrees, grouped }) {\n  return (\n    <nav>\n      {grouped ? (\n        <Grouped agrees={agrees} />\n      ) : (\n        agrees.map((agree, i) => <NaviItem key={i} agree={agree} />)\n      )}\n    </nav>\n  )\n}\n\nNavigation.propTypes = {\n  agrees: PropTypes.array.isRequired,\n  grouped: PropTypes.bool.isRequired\n}\n\nexport default Navigation\n"
  },
  {
    "path": "packages/ui/src/components/Navigation/styles.css",
    "content": "nav {\n  position: absolute;\n  padding-bottom: 20px;\n}\n\nnav p {\n  margin: 4px 0;\n}\n\ndetails {\n  padding-bottom: 7px;\n}\n\nsummary {\n  color: var(--color5);\n  cursor: pointer;\n  font-size: 0.9rem;\n  margin-bottom: 4px;\n  outline: none;\n}\n\ndetails > p {\n  padding-left: 1em;\n  margin-top: 3px;\n}\n\ndetails summary::-webkit-details-marker {\n  transform: translate(0, 1px) scale(0.7);\n  opacity: 0.5;\n}\n\n.count {\n  border-radius: 8px;\n  border: 1px solid var(--color5);\n  background: var(--color5);\n  color: var(--color0);\n  display: inline-block;\n  font-size: 0.5rem;\n  margin-left: 5px;\n  opacity: 0.6;\n  padding: 0px 3px;\n  position: relative;\n  top: -1px;\n}\n\n.statusLabel {\n  border-radius: 6px;\n  color: var(--color0);\n  display: inline-block;\n  font-size: 0.5rem;\n  padding: 2px 4px;\n  margin-right: 0.25rem;\n  opacity: 0.8;\n}\n\n.statusLabel--2 {\n  background: var(--color-green);\n}\n\n.statusLabel--3 {\n  background: var(--color4);\n}\n\n.statusLabel--4 {\n  background: var(--color3);\n}\n\n.statusLabel--5 {\n  background: var(--color5);\n}\n\n"
  },
  {
    "path": "packages/ui/src/components/Request/index.js",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\nimport Definitions from '../Definitions'\nimport Body from '../Body'\n\nconst Request = ({ data }) => {\n  const { method, path, headers_formatted: headers, query, formatted, schema } = data\n  return (\n    <div>\n      <Definitions title=\"method\" description={method.toUpperCase()} />\n      <Definitions title=\"path\" description={path} />\n      {query && !!Object.keys(query).length && (\n        <Definitions title=\"query\">\n          {Object.entries(query).map(([k, v]) => (\n            <dl key={k}>\n              <dt>{k}</dt>\n              <dd>{JSON.stringify(v)}</dd>\n            </dl>\n          ))}\n        </Definitions>\n      )}\n      {headers && !!Object.keys(headers).length && (\n        <Definitions title=\"headers\">\n          {Object.entries(headers).map(([k, v]) => (\n            <dl key={k}>\n              <dt>{k}</dt>\n              <dd>{JSON.stringify(v)}</dd>\n            </dl>\n          ))}\n        </Definitions>\n      )}\n      {formatted && <Body formatted={formatted} schema={schema} />}\n    </div>\n  )\n}\n\nRequest.propTypes = {\n  data: PropTypes.object.isRequired\n}\n\nexport default Request\n"
  },
  {
    "path": "packages/ui/src/components/Request/styles.css",
    "content": ".definitions {\n  color: var(--color1);\n  margin: 1.5em 0;\n}\n\n.definitions h1 {\n  font-size: 1em;\n  color: var(--color5);\n  margin-top: 0;\n  margin-bottom: 1em;\n  padding-left: 0;\n}\n\n.definitions > p,\n.definitions > dl {\n  margin: 0.25em 1em;\n}\n\n.definitions dl dt {\n  color: var(--color3);\n  font-weight: bold;\n  font-style: italic;\n}\n\n.definitions dl dt:after {\n  content: ': ';\n}\n\n.definitions dl > * {\n  display: inline-block;\n  margin-right: 0.5em;\n}\n"
  },
  {
    "path": "packages/ui/src/components/Response/index.js",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\nimport Definitions from '../Definitions'\nimport Body from '../Body'\n\nconst Response = ({ data }) => {\n  const { status, formatted, schema, flowtype } = data\n  return (\n    <div>\n      <Definitions title=\"statusCode\" description={`${status}`} />\n      {formatted && <Body formatted={formatted} schema={schema} flowtype={flowtype} />}\n    </div>\n  )\n}\n\nResponse.propTypes = {\n  data: PropTypes.object.isRequired\n}\n\nexport default Response\n"
  },
  {
    "path": "packages/ui/src/components/Response/styles.css",
    "content": ".definitions {\n  color: var(--color1);\n  margin: 1.5em 0;\n}\n\n.definitions h1 {\n  font-size: 1em;\n  color: var(--color5);\n  margin-top: 0;\n  margin-bottom: 1em;\n  padding-left: 0;\n}\n\n.definitions > p,\n.definitions > dl {\n  margin: 0.25em 1em;\n}\n\n.definitions dl dt {\n  color: var(--color3);\n  font-weight: bold;\n  font-style: italic;\n}\n\n.definitions dl dt:after {\n  content: ': ';\n}\n\n.definitions dl > * {\n  display: inline-block;\n  margin-right: 0.5em;\n}\n"
  },
  {
    "path": "packages/ui/src/index.css",
    "content": "@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,400i|PT+Sans');\n\n/* RGB */\n:root {\n  --color: rgba(26, 40, 31, 1);\n  --color-link: rgba(26, 40, 31, 0.7);\n  --color0: white;\n  --color1: rgba(26, 40, 31, 0.6);\n  --color2: rgba(99, 82, 85, 1);\n  --color3: rgba(206, 123, 145, 1);\n  --color4: rgba(192, 232, 249, 1);\n  --color5: rgba(164, 191, 189, 1);\n  --color-green: #66BB6A;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  color: var(--color-link);\n}\n\na:hover {\n  color: #bbb;\n}\n\nh1 {\n  font-size: 1.5rem;\n  margin: 2rem 0;\n}\n\nh2 {\n  font-size: 1.2rem;\n  margin: 2rem 0 1rem;\n}\n\nbody {\n  color: var(--color);\n  display: flex;\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", \"Segoe UI\", sans-serif;\n  flex-direction: column;\n  min-height: 100vh;\n}\n\n"
  },
  {
    "path": "packages/ui/src/index.js",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport App from './components/App'\n\nReactDOM.render(<App />, document.getElementById('root'))\n"
  },
  {
    "path": "packages/ui/test/agrees/agrees.js",
    "content": "module.exports = [\n  {\n    title: 'getHogeFuga',\n    description: 'hogefuga',\n    request: {\n      path: '/hoge/fuga',\n      method: 'GET',\n      query: {\n        q: 'foo',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: 'hello world',\n      },\n    },\n  },\n  './hoge/foo.json',\n  './foo/bar.yaml',\n  {\n    request: require('./qux/request.json'),\n    response: require('./qux/response.json'),\n  },\n  {\n    request: {\n      path: '/path/:id',\n      method: 'GET',\n      // value for test client\n      values: {\n        id: 'yosuke',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/path/:id',\n      method: 'POST',\n      // query embed data, any query is ok.\n      query: {\n        meta: \"{:meta}\",\n      },\n      body: {\n        message: \"{:message}\"\n      },\n      // value for test client\n      values: {\n        id: 'yosuke',\n        meta: true,\n        message: 'foobarbaz'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}, {:meta}, {:message}',\n      },\n    },\n  },\n  {\n    request: {\n      // if no method then GET\n      path: '/nyan/:id',\n      query: {\n        meta: \"{:meta}\",\n      },\n      // value for test client\n      values: {\n        id: 'yosuke',\n        meta: false,\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}, {:meta}',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/embed/from/response/:id',\n      method: 'POST',\n      query: {\n        meta: \"{:meta}\",\n      },\n      body: {\n        message: '{:message}'\n      },\n      // value for test client\n      values: {\n        id: 'yosuke',\n        meta: false,\n        message: 'this is a message',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // embed template from response values\n        image: '{:image}',\n        topics: '{:topics}',\n        message: 'hello {:id} {:meta} {:message}',\n      },\n      values: {\n        image: 'http://imgfp.hotp.jp/SYS/cmn/images/front_002/logo_hotopepper_264x45.png',\n        topics: [ \n          { \n            a: 'a' \n          }, { \n            b: 'b'\n          } \n        ],\n      }\n    },\n  },\n  {\n    request: {\n      path: '/images/:id',\n      method: 'GET',\n      query: {\n        q: '{:someQueryStrings}',\n      },\n      values: {\n        id: 'yosuke',\n        someQueryStrings: 'foo'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: '{:greeting} {:id} {:someQueryStrings}',\n        images: '{:images}',\n        themes: '{:themes}',\n      },\n      values: {\n        greeting: 'hello',\n        images: [\n          'http://example.com/foo.jpg',\n          'http://example.com/bar.jpg',\n        ],\n        themes: {\n          name: 'green',\n        },\n      }\n    },\n  },\n  {\n    request: {\n      path: '/list/:index',\n      method: 'GET',\n      values: {\n        index: 1\n      }\n    },\n    response: {\n      body: {\n        result : '{:list[:index]}'\n      },\n      values: {\n        list: [\n          'hello',\n          'hi',\n          'dunke',\n        ]\n      }\n    },\n  },\n  {\n    request: {\n      path: '/useschema/:index',\n      method: 'GET',\n      values: {\n        index: 1\n      }\n    },\n    response: {\n      body: {\n        result : '{:list[:index]}'\n      },\n      schema: {\n        type: 'object',\n        properties: {\n          result: {\n            type: 'string'\n          }\n        },\n      },\n      values: {\n        list: [\n          'hello',\n          'hi',\n          'dunke',\n        ]\n      }\n    },\n  },\n  {\n    request: {\n      path: '/useschema/withstring/:index',\n      method: 'GET',\n      values: {\n        index: 1\n      }\n    },\n    response: {\n      body: {\n        result : '{:list[:index]}'\n      },\n      schema: './schema/hi.json',\n      values: {\n        list: [\n          'hello',\n          'hi',\n          'dunke',\n        ]\n      }\n    },\n  },\n  {\n    request: {\n      path: '/headers/:index',\n      method: 'GET',\n      headers: {\n        'x-token': '{:token}', \n        'x-api-key': '{:apiKey}', \n      },\n      values: {\n        index: 2,\n        token: 'nyan',\n        apiKey: 'nyaaan'\n      },\n    },\n    response: {\n      body: {\n        result : '{:list[:index]} {:token} {:apiKey}'\n      },\n      values: {\n        list: [\n          'hello',\n          'hi',\n          'dunke',\n        ]\n      }\n    },\n  },\n  {\n    request: {\n      path: '/headers/:index',\n      method: 'GET',\n      values: {\n        index: 1,\n      },\n    },\n    response: {\n      body: {\n        result : '{:list[:index]}'\n      },\n      values: {\n        list: [\n          'hello',\n          'hi',\n          'dunke',\n        ]\n      }\n    },\n  },\n  {\n    request: {\n      path: '/headers/test/:index',\n      method: 'GET',\n      headers: {\n        'x-test-token': '{:xTestToken}'\n      },\n      values: {\n        index: 1,\n        xTestToken: 'fdajfdsaoijfdoajofdjaoj',\n      },\n    },\n    response: {\n      body: {\n        result : '{:list[:index]}'\n      },\n      values: {\n        list: [\n          'hello',\n          'hi',\n          'dunke',\n        ]\n      }\n    },\n  },\n]\n"
  },
  {
    "path": "packages/ui/test/agrees/agrees.json5",
    "content": "[\n  {\n    request: {\n      path: '/hoge/fuga',\n      method: 'GET',\n      query: {\n        q: 'foo',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        message: 'hello world',\n      },\n    },\n  },\n  './hoge/foo.json',\n  './foo/bar.yaml',\n  {\n    request: './qux/request.json',\n    response: './qux/response.json',\n  },\n  {\n    request: {\n      path: '/path/:id',\n      method: 'GET',\n      // value for test client\n      values: {\n        id: 'yosuke',\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/path/:id',\n      method: 'POST',\n      // query embed data, any query is ok.\n      query: {\n        meta: \"{:meta}\",\n      },\n      body: {\n        message: \"{:message}\"\n      },\n      // value for test client\n      values: {\n        id: 'yosuke',\n        meta: true,\n        message: 'foobarbaz'\n      },\n    },\n    response: {\n      headers: {\n        'x-csrf-token': 'csrf-token', \n      },\n      body: {\n        // :id is for request value\n        message: 'hello {:id}, {:meta}, {:message}',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/path/header/format',\n      method: 'GET',\n    },\n    response: {\n      headers: {\n        'access-control-allow-origin': '{:acao}'\n      },\n      body: {\n        message: 'hello',\n      },\n      values: {\n        'acao': '*'\n      }\n    },\n  },\n  {\n    request: {\n      path: '/path/default/header/',\n      method: 'GET',\n    },\n    response: {\n      body: {\n        message: 'hello',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/path/default/request/header/',\n      method: 'GET',\n      headers: {\n        'x-forwarded-for': 'forward'\n      },\n    },\n    response: {\n      body: {\n        message: 'forward',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/case/insensitive/headers',\n      method: 'GET',\n      headers: {\n        'This-Headers-Should-Be-Lower-Case': 'true'\n      },\n    },\n    response: {\n      body: {\n        message: 'hello case insensitive headers',\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/null/agreed/values',\n    },\n    response: {\n      body: {\n        messages: [\n          { message: '{:messages.0.message}' },\n          '{:messages.1-last}'\n        ],\n      },\n      values: {\n        messages: [\n          { message: null },\n          { message: 'test' },\n        ]\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/randomstring/agreed/values',\n    },\n    response: {\n      body: {\n        random: '{randomString:random}'\n      },\n      values: {\n        random: 8\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/randomint/agreed/values',\n    },\n    response: {\n      body: {\n        random: '{randomInt:random}'\n      },\n      values: {\n        random: '1-1000'\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/parseint/agreed/values/:id',\n    },\n    response: {\n      body: {\n        id: '{parseInt:id}'\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/agreed/messages',\n      method: 'POST',\n      body: {\n        messages: [\n          { message: '{:messages.0.message}' },\n          '{:messages.1-last}'\n        ]\n      },\n      values: {\n        messages: [\n          { message: null },\n          { message: 'test' },\n        ]\n      }\n    },\n    response: {\n      status: 201,\n      body: {\n        results: '{:messages}'\n      },\n      values: {\n        messages: [\n          { message: '{:message0}' },\n          { message: 'test' },\n        ]\n      }\n    },\n  },\n  {\n    request: {\n      path: '/test/agreed/use/null/obj',\n      method: 'POST',\n      body: {\n        test: '{:test}'\n      },\n      values: {\n        test: null,\n      }\n    },\n    response: {\n      status: 201,\n      body: {\n        results: '{:test}'\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/bind/nest/object',\n      method: 'POST',\n      body: {\n        time: {\n          start: '{:time.start}',\n          end: '{:time.end}',\n          break: {\n            start: '{:time.break.start}',\n            end: '{:time.break.end}',\n          }\n        },\n        members: [\n          {\n            id: '{:members.0.id}'\n          },\n          '{:members.1-last}'\n        ]\n      }\n    },\n    response: {\n      body: {\n        time: {\n          start: '{:time.start}',\n          end: '{:time.end}'\n        },\n        break: {\n          start: '{:time.break.start}',\n          end: '{:time.break.end}'\n        },\n        members: [\n          {\n            id: '{:id}'\n          },\n          '{:members.1-last}'\n        ]\n      },\n    },\n  },\n  {\n    request: {\n      path: '/test/unixtime/agreed/values',\n    },\n    response: {\n      body: {\n        unixtime: '{unixtime:time}',\n      },\n      values: {\n        time: 12344556677,\n      }\n    },\n  },\n]\n"
  },
  {
    "path": "packages/ui/test/agrees/foo/bar.yaml",
    "content": "request: \n  path: '/foo/:bar'\n  method: 'PUT'\n  body:\n    a: 'b'\n    c: 'd'\nresponse:\n  headers:\n    Content-Type: 'text'\n  body: 'hello put'\n\n"
  },
  {
    "path": "packages/ui/test/agrees/hoge/foo.json",
    "content": "{\n  'request': {\n    method: 'POST',\n    path: '/hoge/:foo',\n    body: {\n      message: 'foobarbaz',\n    },\n  },\n  response: {\n    body: {\n      message: 'hello post',\n    },\n  },\n}\n"
  },
  {
    "path": "packages/ui/test/agrees/hoge/fuga/_agree.json",
    "content": "{\n  request: {\n    method: 'GET',\n  },\n  response: {\n    status: 200, // default is 200\n    body: {\n      message: 'hello world'\n    }\n  }\n}\n"
  },
  {
    "path": "packages/ui/test/agrees/hoge/fuga/request.json",
    "content": "{\n}\n"
  },
  {
    "path": "packages/ui/test/agrees/index.js",
    "content": "module.exports = [\n  './hoge/foo.json',\n  './foo/bar.yaml'\n]\n"
  },
  {
    "path": "packages/ui/test/agrees/notify.js",
    "content": "module.exports = [\n  {\n    request: {\n      path: \"/messages\",\n      method: \"POST\",\n      body: {\n        message: \"{:message}\"\n      },\n      values: {\n        message: \"test\"\n      }\n    },\n    response: {\n      body: {\n        result: \"{:message}\"\n      },\n      values: {\n        message: \"test\"\n      },\n      notify: {\n        event: \"message2\",\n        body: {\n          message: \"message! {:message}\"\n        }\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/messages2\",\n      method: \"POST\",\n      body: {\n        message: \"{:message}\"\n      },\n      values: {\n        message: \"test\"\n      }\n    },\n    response: {\n      body: {\n        result: \"{:message}\"\n      },\n      values: {\n        message: \"test\"\n      },\n      notify: {\n        body: {\n          message: \"message2 {:message}\"\n        }\n      }\n    }\n  },\n  {\n    request: {\n      path: \"/long_long_long_path/messages3\",\n      method: \"POST\",\n      body: {\n        message: \"{:message}\"\n      },\n      values: {\n        message: \"test\"\n      }\n    },\n    response: {\n      body: {\n        result: \"{:message}\"\n      },\n      values: {\n        message: \"test\"\n      },\n      notify: {\n        body: {\n          message: \"message2 {:message}\"\n        }\n      }\n    }\n  }\n];\n"
  },
  {
    "path": "packages/ui/test/agrees/qux/request.json",
    "content": "{\n  path: '/qux/fuga',\n  method: 'DELETE',\n}\n"
  },
  {
    "path": "packages/ui/test/agrees/qux/response.json",
    "content": "{\n  status: 204,\n}\n"
  },
  {
    "path": "packages/ui/test/agrees/schema/hi.json",
    "content": "{\n  type: 'object',\n  properties: {\n    result: {\n      type: 'string'\n    }\n  },\n}\n"
  },
  {
    "path": "packages/ui/test/agrees/sub.js",
    "content": "module.exports = (a, b) => a - b \n"
  },
  {
    "path": "renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\"\n  ]\n}\n"
  }
]