ruby-wisp-source 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +28 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +12 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/lib/wisp/source.rb +7 -0
- data/ruby-wisp-source.gemspec +13 -0
- data/vendor/History.md +159 -0
- data/vendor/LICENSE +24 -0
- data/vendor/Makefile +64 -0
- data/vendor/Readme.md +615 -0
- data/vendor/analyzer.js +385 -0
- data/vendor/ast.js +214 -0
- data/vendor/backend/javascript/writer.js +212 -0
- data/vendor/bin/wisp.js +2 -0
- data/vendor/compiler.js +1026 -0
- data/vendor/design.md +114 -0
- data/vendor/embed.js +2 -0
- data/vendor/engine/browser.js +59 -0
- data/vendor/engine/node.js +13 -0
- data/vendor/interactivate/Makefile +38 -0
- data/vendor/interactivate/Readme.md +28 -0
- data/vendor/interactivate/build/cache.manifest +12 -0
- data/vendor/interactivate/build/codemirror-compressed.js +4 -0
- data/vendor/interactivate/build/codemirror.css +248 -0
- data/vendor/interactivate/build/main.js +5401 -0
- data/vendor/interactivate/build/solarized.css +203 -0
- data/vendor/interactivate/index.html +429 -0
- data/vendor/interactivate/node_modules/codemirror-activine/License.md +18 -0
- data/vendor/interactivate/node_modules/codemirror-activine/Readme.md +22 -0
- data/vendor/interactivate/node_modules/codemirror-activine/core.js +33 -0
- data/vendor/interactivate/node_modules/codemirror-activine/package.json +36 -0
- data/vendor/interactivate/node_modules/codemirror-hashare/License.md +18 -0
- data/vendor/interactivate/node_modules/codemirror-hashare/Readme.md +23 -0
- data/vendor/interactivate/node_modules/codemirror-hashare/core.js +31 -0
- data/vendor/interactivate/node_modules/codemirror-hashare/package.json +37 -0
- data/vendor/interactivate/node_modules/codemirror-persist/License.md +18 -0
- data/vendor/interactivate/node_modules/codemirror-persist/Readme.md +22 -0
- data/vendor/interactivate/node_modules/codemirror-persist/core.js +25 -0
- data/vendor/interactivate/node_modules/codemirror-persist/package.json +34 -0
- data/vendor/interactivate/node_modules/interactivate/History.md +47 -0
- data/vendor/interactivate/node_modules/interactivate/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/Readme.md +11 -0
- data/vendor/interactivate/node_modules/interactivate/demo/Readme.md +24 -0
- data/vendor/interactivate/node_modules/interactivate/demo/build/cache.manifest +12 -0
- data/vendor/interactivate/node_modules/interactivate/demo/build/codemirror-compressed.js +4 -0
- data/vendor/interactivate/node_modules/interactivate/demo/build/codemirror.css +248 -0
- data/vendor/interactivate/node_modules/interactivate/demo/build/main.js +267 -0
- data/vendor/interactivate/node_modules/interactivate/demo/build/solarized.css +207 -0
- data/vendor/interactivate/node_modules/interactivate/demo/index.html +115 -0
- data/vendor/interactivate/node_modules/interactivate/demo/main.js +39 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/Readme.md +22 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/core.js +33 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/package.json +36 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/Readme.md +23 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/core.js +31 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/package.json +37 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/Readme.md +22 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/core.js +25 -0
- data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/package.json +34 -0
- data/vendor/interactivate/node_modules/interactivate/demo/package.json +21 -0
- data/vendor/interactivate/node_modules/interactivate/host/window.js +19 -0
- data/vendor/interactivate/node_modules/interactivate/interactivate.js +187 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/History.md +10 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/Readme.md +68 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/diff.js +45 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/index.js +5 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/package.json +53 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/patch.js +21 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/rebase.js +33 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/diff.js +62 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/index.js +16 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/patch.js +54 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/History.md +15 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/Readme.md +54 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/event.js +39 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/index.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/History.md +20 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/Readme.md +45 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/end.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/index.js +8 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-error.js +9 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-reduced.js +9 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/package.json +57 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduce.js +59 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduced.js +15 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reducible.js +87 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/index.js +6 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reduce.js +116 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reducible.js +106 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/package.json +56 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/test/index.js +91 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/History.md +60 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/Readme.md +125 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/core.js +227 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/package.json +93 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/browser.js +18 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/common-index.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/common.js +270 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/index.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/phantom-index.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/tap-index.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/testling-index.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/History.md +139 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/License.md +19 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/Readme.md +253 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/capture.js +34 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/concat.js +37 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/debug/print.js +45 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/delay.js +29 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/drop-while.js +39 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/drop.js +40 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/expand.js +25 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/filter.js +21 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/fold.js +55 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/hub.js +102 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/index.js +33 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/into.js +16 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/map.js +19 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/merge.js +50 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/History.md +20 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/License.md +18 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/Readme.md +45 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/end.js +3 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/index.js +8 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-error.js +9 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-reduced.js +9 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/package.json +57 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduce.js +59 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduced.js +15 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reducible.js +87 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/index.js +6 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reduce.js +116 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reducible.js +106 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/package.json +60 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/reducer.js +51 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/reductions.js +31 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/take-while.js +23 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/take.js +40 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/benchmark.js +32 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/capture.js +108 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/concat.js +104 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/delay.js +29 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/drop-while.js +118 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/drop.js +89 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/errors.js +222 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/filter.js +72 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/fold.js +111 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/hub.js +222 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/index.js +23 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/into.js +22 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/map.js +67 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/merge.js +75 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/reductions.js +105 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/take-while.js +134 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/take.js +82 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/util/event.js +25 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/util/lazy.js +9 -0
- data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/util/test.js +34 -0
- data/vendor/interactivate/node_modules/interactivate/output.js +60 -0
- data/vendor/interactivate/node_modules/interactivate/package.json +30 -0
- data/vendor/interactivate/node_modules/interactivate/render.js +23 -0
- data/vendor/interactivate/node_modules/interactivate/view.js +79 -0
- data/vendor/interactivate/package.json +22 -0
- data/vendor/interactivate/src/host.wisp +84 -0
- data/vendor/interactivate/src/main.wisp +38 -0
- data/vendor/node_modules/browserify/LICENSE +63 -0
- data/vendor/node_modules/browserify/_empty.js +0 -0
- data/vendor/node_modules/browserify/bin/advanced.txt +36 -0
- data/vendor/node_modules/browserify/bin/cmd.js +150 -0
- data/vendor/node_modules/browserify/bin/usage.txt +32 -0
- data/vendor/node_modules/browserify/example/api/browser/bar.js +1 -0
- data/vendor/node_modules/browserify/example/api/browser/foo.js +5 -0
- data/vendor/node_modules/browserify/example/api/browser/main.js +2 -0
- data/vendor/node_modules/browserify/example/api/build.js +4 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/beep.js +2 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/boop.js +2 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/build.sh +4 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/robot.js +1 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/static/beep.html +2 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/static/beep.js +6 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/static/boop.html +2 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/static/boop.js +6 -0
- data/vendor/node_modules/browserify/example/multiple_bundles/static/common.js +3 -0
- data/vendor/node_modules/browserify/example/source_maps/build.js +10 -0
- data/vendor/node_modules/browserify/example/source_maps/build.sh +4 -0
- data/vendor/node_modules/browserify/example/source_maps/index.html +11 -0
- data/vendor/node_modules/browserify/example/source_maps/js/foo.js +7 -0
- data/vendor/node_modules/browserify/example/source_maps/js/main.js +4 -0
- data/vendor/node_modules/browserify/example/source_maps/js/wunder/bar.js +8 -0
- data/vendor/node_modules/browserify/index.js +352 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/LICENSE.APACHE2 +15 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/LICENSE.MIT +24 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/examples/all_docs.js +13 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/index.js +191 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/LICENSE +24 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/README.markdown +11 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/bench.js +26 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/examples/twitterfeed.js +30 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/jsonparse.js +401 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/package.json +40 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic.json +167 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic2.json +180 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/test/boundary.js +110 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/test/primitives.js +54 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/test/utf8.js +38 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/package.json +43 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/readme.markdown +145 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/bool.js +41 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/destroy_missing.js +22 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/empty.js +44 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/fixtures/all_npm.json +4030 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/fn.js +39 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/multiple_objects.js +42 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/multiple_objects_error.js +35 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/parsejson.js +28 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/stringify.js +41 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/stringify_object.js +47 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/test.js +35 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/test2.js +29 -0
- data/vendor/node_modules/browserify/node_modules/JSONStream/test/two-ways.js +41 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/cmd.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/example/input.json +13 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/example/output.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/example/sourcemap/input.json +15 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/example/sourcemap/output.js +6 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/index.js +79 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/LICENSE +23 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/README.md +111 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/example/two-files-short.js +26 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/example/two-files.js +47 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/index.js +97 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/LICENSE +23 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/README.md +85 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/example/comment-to-json.js +15 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/index.js +89 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/package.json +40 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/test/comment-regex.js +25 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/test/convert-source-map.js +129 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/LICENSE +23 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/README.md +88 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/example/foo-bar.js +8 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/index.js +127 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/CHANGELOG.md +58 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/LICENSE +28 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/Makefile.dryice.js +166 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/README.md +347 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/assert-shim.js +56 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/mini-require.js +152 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/prefix-source-map.jsm +20 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/prefix-utils.jsm +18 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/suffix-browser.js +8 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/suffix-source-map.jsm +6 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/suffix-utils.jsm +21 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/test-prefix.js +8 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/test-suffix.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/array-set.js +96 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/base64.js +42 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/binary-search.js +81 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-map-consumer.js +426 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-node.js +353 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/util.js +91 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map.js +8 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/README.md +119 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/package.json +40 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/package.json +81 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/run-tests.js +73 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-api.js +26 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-array-set.js +71 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-base64.js +35 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-source-map-consumer.js +291 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-source-node.js +282 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/util.js +152 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/package.json +49 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/test/inline-source-map.js +247 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/test/source-content.js +129 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/LICENSE +23 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/MOZILLA_LICENSE +28 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/README.md +35 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/base64-vlq.js +108 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/base64.js +35 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/example/one-to-one-mappings.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/index.js +82 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/package.json +46 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/test/parse-base64vlq-mappings.js +72 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/package.json +52 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/test/combine-source-map.js +143 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/README.html +1012 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/README.org +593 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/bin/uglifyjs +334 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/docstyle.css +75 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/consolidator.js +1220 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/parse-js.js +1369 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/process.js +2117 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/squeeze-more.js +78 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/package.json +35 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/beautify.js +28 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/testconsolidator.js +1391 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/testparser.js +409 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/1e21.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array1.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array2.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array3.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array4.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/assignment.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/concatstring.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/const.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/div-with-regexp.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/forstatement.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/if-not.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/if.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/infinite.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue10.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue11.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue13.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue14.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue16.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue17.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue20.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue21.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue25.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue27.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue278.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue28.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue29.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue30.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue34.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue349.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue353.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue372.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue4.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue48.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue50.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue53.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue68.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue69.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue9.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issues222_324.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/mangle.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/null_string.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/var.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/whitespace.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/with.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/1e21.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array1.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array2.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array3.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array4.js +6 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/assignment.js +20 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/concatstring.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/const.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/div-with-regexp.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/forstatement.js +10 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/if-not.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/if.js +6 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/ifreturn.js +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js +16 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/infinite.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue10.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue11.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue13.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue14.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue16.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue17.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue20.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue21.js +6 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue25.js +7 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue27.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue278.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue28.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue29.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue30.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue34.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue349.js +25 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue353.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue372.js +32 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue4.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue48.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue50.js +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue53.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue54.1.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue68.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue69.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue9.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issues222_324.js +82 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/mangle.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/null_string.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/strict-equals.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/var.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/whitespace.js +21 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/with.js +2 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/scripts.js +57 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/tmp/hoist.js +33 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/tmp/instrument.js +97 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/tmp/test.js +30 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/uglify-js.js +18 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/package.json +70 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/prelude.js +42 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/readme.markdown +81 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/comment.js +33 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/only_execute_entries.js +26 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/order.js +38 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/pack.js +28 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/raw.js +32 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/source-maps-existing.js +56 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/source-maps.js +113 -0
- data/vendor/node_modules/browserify/node_modules/browser-pack/test/this.js +24 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/README.md +115 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/assert.js +314 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/child_process.js +2 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/dgram.js +0 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/events.js +183 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/fs.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/https.js +13 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/net.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/path.js +175 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/process.js +55 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/querystring.js +250 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/stream.js +119 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/string_decoder.js +161 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/sys.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/timers.js +39 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/tls.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/tty.js +2 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/url.js +604 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/util.js +351 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/empty.js +0 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/builtin.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom/custom.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom/main.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom/package.json +7 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/resolve.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/skip/main.js +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/skip/package.json +7 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/example/skip.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/index.js +170 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/README.md +11 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/buffer_ieee754.js +84 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/index.js +1317 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/README.md +14 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/lib/b64.js +84 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/package.json +33 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/test/runner.js +50 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/package.json +49 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/test/buffer.js +218 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/LICENCE +19 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/README.md +32 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/index.js +85 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/package.json +80 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/test/index.js +67 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/test/static/index.html +12 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/test/static/test-adapter.js +53 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/example/bundle.js +637 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/example/index.html +12 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/example/test.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/index.js +74 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/md5.js +384 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/package.json +37 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/readme.markdown +20 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/rng.js +37 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/sha.js +210 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/test/simple.js +35 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/get/index.html +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/get/main.js +14 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/get/server.js +12 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/headers/index.html +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/headers/main.js +18 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/headers/server.js +15 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/data.json +139 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/index.html +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/main.js +13 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/LICENSE.APACHE2 +15 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/LICENSE.MIT +24 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/examples/all_docs.js +13 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/index.js +189 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/LICENSE +24 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/README.markdown +11 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/bench.js +26 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/examples/twitterfeed.js +30 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/jsonparse.js +379 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/package.json +36 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic.json +167 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic2.json +180 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/test/primitives.js +54 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/test/utf8.js +38 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/package.json +40 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/readme.markdown +145 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/bool.js +41 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/destroy_missing.js +22 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/empty.js +44 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/fixtures/all_npm.json +4030 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/fn.js +39 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/memory.js +69 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/multiple_objects.js +42 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/multiple_objects_error.js +35 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/parsejson.js +28 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/stringify.js +41 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/stringify_object.js +47 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/test.js +35 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/test2.js +29 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/two-ways.js +41 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/server.js +10 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/post/index.html +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/post/main.js +16 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/post/server.js +19 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/streaming/index.html +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/streaming/main.js +16 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/streaming/server.js +21 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/index.js +60 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/lib/request.js +131 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/lib/response.js +119 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/index.js +48 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/package.json +33 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/readme.md +31 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/test.js +34 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/package.json +49 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/readme.markdown +128 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/example/async.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/example/sync.js +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/index.js +5 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js +131 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/core.js +4 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/core.json +38 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/sync.js +99 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/package.json +39 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/readme.markdown +134 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/core.js +12 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/filter.js +17 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/filter_sync.js +15 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/mock.js +68 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/mock_sync.js +68 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/baz/doom.js +0 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/baz/package.json +3 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/baz/quux.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/cup.coffee +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/foo.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/mug.coffee +0 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/mug.js +0 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/other_path/lib/other-lib.js +0 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/other_path/root.js +0 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver.js +144 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver_sync.js +157 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/README.markdown +103 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/bundle.js +473 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/entry.js +6 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/index.html +9 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/server.js +6 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/index.js +85 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/package.json +46 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/testling/run.js +22 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/testling/test.sh +11 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/index.js +43 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/package.json +40 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/readme.md +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/test/zlib.test.js +65 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/zlib.js +55 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/package.json +45 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/test/core.js +28 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/test/false.js +24 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/test/fixtures/foo.js +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/test/local.js +15 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/test/mocha.opts +1 -0
- data/vendor/node_modules/browserify/node_modules/browser-resolve/test/modules.js +99 -0
- data/vendor/node_modules/browserify/node_modules/concat-stream/index.js +50 -0
- data/vendor/node_modules/browserify/node_modules/concat-stream/package.json +33 -0
- data/vendor/node_modules/browserify/node_modules/concat-stream/readme.md +31 -0
- data/vendor/node_modules/browserify/node_modules/concat-stream/test.js +34 -0
- data/vendor/node_modules/browserify/node_modules/duplexer/LICENCE +19 -0
- data/vendor/node_modules/browserify/node_modules/duplexer/Makefile +4 -0
- data/vendor/node_modules/browserify/node_modules/duplexer/README.md +36 -0
- data/vendor/node_modules/browserify/node_modules/duplexer/index.js +77 -0
- data/vendor/node_modules/browserify/node_modules/duplexer/package.json +46 -0
- data/vendor/node_modules/browserify/node_modules/duplexer/test.js +27 -0
- data/vendor/node_modules/browserify/node_modules/inherits/README.md +51 -0
- data/vendor/node_modules/browserify/node_modules/inherits/inherits.js +29 -0
- data/vendor/node_modules/browserify/node_modules/inherits/package.json +29 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/bench/results.txt +18 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/bench/run.sh +2 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/bin/cmd.js +13 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/buffer.js +3863 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/bundle.sh +4 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/example/files/foo/index.js +6 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/example/files/main.js +6 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/example/insert.js +10 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/index.js +102 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/README.markdown +45 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/example/base.js +3 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/example/dir.js +3 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/index.js +29 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/package.json +50 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/test/dirs.js +66 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/bench/jquery.js +4 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/bench/results.txt +15 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/bench/run.js +7 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/example/detect.js +6 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/example/src.js +27 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/index.js +166 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/example/types.js +8 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/index.js +42 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/ChangeLog +18 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/LICENSE.BSD +19 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/README.md +73 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/bin/esparse.js +117 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/bin/esvalidate.js +177 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/component.json +14 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/doc/index.html +473 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/esprima.js +3895 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/examples/detectnestedternary.js +106 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/examples/findbooleantrap.js +173 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/examples/tokendist.js +33 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/index.html +102 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/package.json +47 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/benchmarks.html +58 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/benchmarks.js +334 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compare.html +69 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compare.js +328 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compat.html +40 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compat.js +239 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/coverage.footer.html +3 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/coverage.header.html +37 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/coverage.html +4676 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/index.html +37 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/module.html +36 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/module.js +129 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/reflect.js +422 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/run.js +66 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/runner.js +387 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/test.js +19764 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/package.json +57 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/readme.markdown +52 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/test/parent.js +25 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/package.json +68 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/readme.markdown +99 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/argument.js +17 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/assign_implicit.js +13 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/detect.js +17 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/argument.js +6 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/assign_implicit.js +2 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/detect.js +32 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/named_arg.js +6 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/obj.js +1 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/return_hash.js +5 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/right_hand.js +2 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/named_arg.js +17 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/obj.js +16 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/package.json +5 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/return_hash.js +13 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/right_hand.js +16 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/shebang.js +19 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/2132fedf7e11adbdb654aea08615ffea7b84cbf0.patch +25 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/README.md +15 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js +52 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/index.js +2 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/package.json +33 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/package.json +59 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/readme.markdown +86 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/always/main.js +6 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/always.js +23 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/global/filename.js +2 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/global/main.js +2 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/global.js +49 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/buffer.js +1 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/foo/buf.js +4 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/foo/index.js +4 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/main.js +4 -0
- data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert.js +35 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/cmd.js +8 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/example/deps.js +8 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/example/files/bar.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/example/files/foo.js +5 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/example/files/main.js +2 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/example/files/xyz.js +2 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/index.js +177 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/example/strings.js +6 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/example/strings_src.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/index.js +66 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/LICENSE.BSD +19 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/LICENSE.source-map +27 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/README.md +99 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/bin/escodegen.js +43 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/bin/esgenerate.js +43 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/escodegen.js +2245 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/CHANGELOG.md +58 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/LICENSE +28 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/Makefile.dryice.js +166 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/README.md +347 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/assert-shim.js +56 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/mini-require.js +152 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/prefix-source-map.jsm +20 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/prefix-utils.jsm +18 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/suffix-browser.js +8 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/suffix-source-map.jsm +6 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/suffix-utils.jsm +21 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/test-prefix.js +8 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/test-suffix.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/array-set.js +96 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/base64.js +42 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/binary-search.js +81 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/source-map-consumer.js +426 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/source-node.js +353 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/util.js +91 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map.js +8 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/README.md +119 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/package.json +40 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/package.json +81 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/run-tests.js +73 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-api.js +26 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-array-set.js +71 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-base64.js +35 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-map-consumer.js +291 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-node.js +282 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/util.js +152 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/package.json +55 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/ChangeLog +18 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/LICENSE.BSD +19 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/README.md +73 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/bin/esparse.js +117 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/bin/esvalidate.js +177 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/component.json +14 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/doc/index.html +473 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/esprima.js +3895 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/examples/detectnestedternary.js +106 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/examples/findbooleantrap.js +173 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/examples/tokendist.js +33 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/index.html +102 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/package.json +47 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/benchmarks.html +58 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/benchmarks.js +334 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compare.html +69 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compare.js +328 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compat.html +40 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compat.js +239 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/coverage.footer.html +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/coverage.header.html +37 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/coverage.html +4676 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/index.html +37 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/module.html +36 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/module.js +129 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/reflect.js +422 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/run.js +66 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/runner.js +387 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/test.js +19764 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/package.json +43 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/readme.markdown +73 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/both.js +26 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/chained.js +9 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/both.js +4 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/chained.js +5 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/nested.js +22 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/shebang.js +5 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/sparse-array.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/strings.js +13 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/word.js +13 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/nested.js +9 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/return.js +9 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/shebang.js +9 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/sparse-array.js +14 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/strings.js +9 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/word.js +12 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/example/async.js +5 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/example/sync.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/index.js +5 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/async.js +131 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/core.js +4 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/core.json +38 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/sync.js +99 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/package.json +39 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/readme.markdown +134 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/core.js +12 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/filter.js +17 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/filter_sync.js +15 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/mock.js +68 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/mock_sync.js +68 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/baz/doom.js +0 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/baz/package.json +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/baz/quux.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/cup.coffee +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/foo.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/mug.coffee +0 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/mug.js +0 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/other_path/lib/other-lib.js +0 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/other_path/root.js +0 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver.js +144 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver_sync.js +157 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/LICENSE.APACHE2 +15 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/LICENSE.MIT +24 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/index.js +108 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/package.json +50 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/readme.markdown +63 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/auto-destroy.js +30 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/buffering.js +71 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/end.js +45 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/index.js +114 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/package.json +55 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/readme.markdown +135 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/bundle.js +21 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/deps.js +42 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/bar.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/filterable.js +10 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/foo.js +5 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/main.js +2 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/f.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/main.js +7 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/g/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/g/node_modules/insert-ggg/index.js +7 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/g/package.json +6 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/insert-aaa/index.js +7 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/insert-bbb/index.js +7 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/m/index.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/f.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/main.js +7 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/g/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/g/package.json +6 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/g/tr_g.js +6 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/m/index.js +3 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/tr_a.js +6 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/tr_b.js +6 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/files/xyz.js +2 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/filter.js +37 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/noparse.js +37 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/tr_fn.js +29 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/tr_module.js +21 -0
- data/vendor/node_modules/browserify/node_modules/module-deps/test/tr_sh.js +21 -0
- data/vendor/node_modules/browserify/node_modules/optimist/LICENSE +21 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/bool.js +10 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/boolean_double.js +7 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/boolean_single.js +7 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/default_hash.js +8 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/default_singles.js +7 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/divide.js +8 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/line_count.js +20 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/line_count_options.js +29 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/line_count_wrap.js +29 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/nonopt.js +4 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/reflect.js +2 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/short.js +3 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/string.js +11 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/usage-options.js +19 -0
- data/vendor/node_modules/browserify/node_modules/optimist/example/xup.js +10 -0
- data/vendor/node_modules/browserify/node_modules/optimist/index.js +478 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/README.markdown +70 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/example/center.js +10 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/example/meat.js +3 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/index.js +76 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/package.json +44 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/test/break.js +30 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/test/idleness.txt +63 -0
- data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/test/wrap.js +31 -0
- data/vendor/node_modules/browserify/node_modules/optimist/package.json +45 -0
- data/vendor/node_modules/browserify/node_modules/optimist/readme.markdown +487 -0
- data/vendor/node_modules/browserify/node_modules/optimist/test/_/argv.js +2 -0
- data/vendor/node_modules/browserify/node_modules/optimist/test/_/bin.js +3 -0
- data/vendor/node_modules/browserify/node_modules/optimist/test/_.js +71 -0
- data/vendor/node_modules/browserify/node_modules/optimist/test/parse.js +446 -0
- data/vendor/node_modules/browserify/node_modules/optimist/test/usage.js +292 -0
- data/vendor/node_modules/browserify/node_modules/shell-quote/README.markdown +72 -0
- data/vendor/node_modules/browserify/node_modules/shell-quote/example/parse.js +3 -0
- data/vendor/node_modules/browserify/node_modules/shell-quote/example/quote.js +3 -0
- data/vendor/node_modules/browserify/node_modules/shell-quote/index.js +33 -0
- data/vendor/node_modules/browserify/node_modules/shell-quote/package.json +46 -0
- data/vendor/node_modules/browserify/node_modules/shell-quote/test/parse.js +14 -0
- data/vendor/node_modules/browserify/node_modules/shell-quote/test/quote.js +15 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/example/check.js +12 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/example/src.js +9 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/index.js +54 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/LICENSE.BSD +19 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/README.md +74 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/codemirror/codemirror.css +112 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/codemirror/codemirror.js +2972 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/codemirror/javascript.js +360 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/json2.js +487 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/style.css +164 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/treeview-min.js +12 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/treeview-sprite.gif +0 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/treeview.css +7 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/yahoo-dom-event.js +14 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/bin/esparse.js +42 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/changes +92 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/cm +696 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/checkenv.js +42 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/collector.html +82 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/collector.js +170 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/functiontrace.html +106 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/functiontrace.js +123 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/parse.css +82 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/parse.html +352 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/precedence.html +225 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/rewrite.html +120 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/rewrite.js +71 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/esprima.js +3577 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/index.html +103 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/package.json +42 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/Tokenizer.js +646 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/XMLHttpRequest.js +509 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/ZeParser.js +2185 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/backbone-0.5.3.js +1158 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/benchmark.js +3261 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/escodegen.js +906 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/esmorph.js +240 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/ext-core-3.0.0.js +6579 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/ext-core-3.1.0.js +10255 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jquery-1.6.4.js +9046 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jquery-1.7.1.js +9266 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jquery.mobile-1.0.js +6951 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jsdefs.js +731 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jslex.js +588 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jsparse.js +1921 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/mootools-1.3.2.js +5952 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/mootools-1.4.1.js +6297 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/parse-js.js +1342 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/platform.js +878 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/prototype-1.6.1.js +4874 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/prototype-1.7.0.0.js +6082 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/underscore-1.2.3.js +981 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/benchmarks.html +58 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/benchmarks.js +328 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compare.html +140 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compare.js +270 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compat.html +40 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compat.js +239 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/coverage.footer.html +3 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/coverage.header.html +37 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/coverage.html +3617 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/index.html +36 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/reflect.js +403 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/run.js +66 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/test.js +16659 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/tools/generate-unicode-regex.py +164 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/tools/update-coverage.sh +28 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/package.json +53 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/readme.markdown +87 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/test/check.js +17 -0
- data/vendor/node_modules/browserify/node_modules/syntax-error/test/sources/check.js +9 -0
- data/vendor/node_modules/browserify/node_modules/through/LICENSE.APACHE2 +15 -0
- data/vendor/node_modules/browserify/node_modules/through/LICENSE.MIT +24 -0
- data/vendor/node_modules/browserify/node_modules/through/index.js +103 -0
- data/vendor/node_modules/browserify/node_modules/through/package.json +50 -0
- data/vendor/node_modules/browserify/node_modules/through/readme.markdown +43 -0
- data/vendor/node_modules/browserify/node_modules/through/test/buffering.js +71 -0
- data/vendor/node_modules/browserify/node_modules/through/test/end.js +26 -0
- data/vendor/node_modules/browserify/node_modules/through/test/index.js +114 -0
- data/vendor/node_modules/browserify/node_modules/umd/README.md +46 -0
- data/vendor/node_modules/browserify/node_modules/umd/index.js +63 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/README.md +81 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/index.js +39 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/History.md +10 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/Makefile +6 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/Readme.md +44 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/index.js +10 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/package.json +31 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/LICENSE +18 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/example/async.js +5 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/example/sync.js +3 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/index.js +5 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/async.js +131 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/core.js +4 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/core.json +38 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/sync.js +99 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/package.json +39 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/readme.markdown +134 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/core.js +12 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/filter.js +17 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/filter_sync.js +15 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/mock.js +68 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/mock_sync.js +68 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/baz/doom.js +0 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/baz/package.json +3 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/baz/quux.js +1 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js +1 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/cup.coffee +1 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/foo.js +1 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/mug.coffee +0 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/mug.js +0 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/other_path/lib/other-lib.js +0 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/other_path/root.js +0 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver.js +144 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver_sync.js +157 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/package.json +43 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/test/index.js +43 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/README.md +26 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/index.js +9 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/package.json +46 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/test/fixture/jquery.js +9597 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/test/fixture/jquery.min.js +3 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/test/index.js +8 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/LICENSE.APACHE2 +15 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/LICENSE.MIT +24 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/index.js +108 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/package.json +50 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/readme.markdown +63 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/auto-destroy.js +30 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/buffering.js +71 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/end.js +45 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/index.js +114 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/README.md +544 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/bin/uglifyjs +370 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/ast.js +964 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/compress.js +1968 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/mozilla-ast.js +265 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/output.js +1220 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/parse.js +1407 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/scope.js +580 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/sourcemap.js +81 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/transform.js +218 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/utils.js +288 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md +58 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/LICENSE +28 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/Makefile.dryice.js +166 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/README.md +347 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/assert-shim.js +56 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/mini-require.js +152 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/prefix-source-map.jsm +20 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/prefix-utils.jsm +18 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/suffix-browser.js +8 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/suffix-source-map.jsm +6 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/suffix-utils.jsm +21 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/test-prefix.js +8 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/test-suffix.js +3 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/array-set.js +96 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64.js +42 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/binary-search.js +81 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js +426 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-node.js +353 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/util.js +91 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map.js +8 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/README.md +119 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json +40 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/package.json +81 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/run-tests.js +73 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-api.js +26 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-array-set.js +71 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64.js +35 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-consumer.js +291 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-node.js +282 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/util.js +152 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/package.json +48 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/arrays.js +12 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/blocks.js +49 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/conditionals.js +143 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/dead-code.js +89 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/debugger.js +24 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/drop-unused.js +97 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-105.js +17 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-12.js +11 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-22.js +17 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-44.js +31 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-59.js +30 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/labels.js +163 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/loops.js +123 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/properties.js +25 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/sequences.js +161 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/switch.js +210 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/run-tests.js +170 -0
- data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/tools/node.js +164 -0
- data/vendor/node_modules/browserify/node_modules/umd/package.json +39 -0
- data/vendor/node_modules/browserify/node_modules/umd/template.js +33 -0
- data/vendor/node_modules/browserify/package.json +65 -0
- data/vendor/node_modules/browserify/readme.markdown +426 -0
- data/vendor/node_modules/browserify/test/backbone.js +22 -0
- data/vendor/node_modules/browserify/test/bin.js +31 -0
- data/vendor/node_modules/browserify/test/bin_entry.js +31 -0
- data/vendor/node_modules/browserify/test/buffer.js +118 -0
- data/vendor/node_modules/browserify/test/bundle_sourcemap.js +30 -0
- data/vendor/node_modules/browserify/test/catch/main.js +1 -0
- data/vendor/node_modules/browserify/test/catch.js +22 -0
- data/vendor/node_modules/browserify/test/circular/a.js +3 -0
- data/vendor/node_modules/browserify/test/circular/b.js +1 -0
- data/vendor/node_modules/browserify/test/circular/main.js +1 -0
- data/vendor/node_modules/browserify/test/circular.js +34 -0
- data/vendor/node_modules/browserify/test/coffee_bin/main.coffee +2 -0
- data/vendor/node_modules/browserify/test/coffee_bin/x.coffee +1 -0
- data/vendor/node_modules/browserify/test/coffee_bin.js +36 -0
- data/vendor/node_modules/browserify/test/comment/main.js +2 -0
- data/vendor/node_modules/browserify/test/comment.js +16 -0
- data/vendor/node_modules/browserify/test/crypto.js +37 -0
- data/vendor/node_modules/browserify/test/dnode.js +27 -0
- data/vendor/node_modules/browserify/test/dollar/dollar/index.js +7 -0
- data/vendor/node_modules/browserify/test/dollar.js +18 -0
- data/vendor/node_modules/browserify/test/entry/main.js +1 -0
- data/vendor/node_modules/browserify/test/entry/one.js +1 -0
- data/vendor/node_modules/browserify/test/entry/two.js +1 -0
- data/vendor/node_modules/browserify/test/entry.js +19 -0
- data/vendor/node_modules/browserify/test/entry_exec/fail.js +1 -0
- data/vendor/node_modules/browserify/test/entry_exec/main.js +1 -0
- data/vendor/node_modules/browserify/test/entry_exec.js +15 -0
- data/vendor/node_modules/browserify/test/error_code/src.js +2 -0
- data/vendor/node_modules/browserify/test/error_code.js +22 -0
- data/vendor/node_modules/browserify/test/export/entry.js +1 -0
- data/vendor/node_modules/browserify/test/export.js +35 -0
- data/vendor/node_modules/browserify/test/fake/fake_fs.js +1 -0
- data/vendor/node_modules/browserify/test/fake/main.js +2 -0
- data/vendor/node_modules/browserify/test/fake.js +15 -0
- data/vendor/node_modules/browserify/test/field/miss.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-miss/browser.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-miss/main.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-miss/package.json +4 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-object/browser.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-object/main.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-object/package.json +4 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-string/browser.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-string/main.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-string/package.json +4 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-sub/browser/a.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-sub/browser/b.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-sub/main.js +1 -0
- data/vendor/node_modules/browserify/test/field/node_modules/z-sub/package.json +4 -0
- data/vendor/node_modules/browserify/test/field/object.js +1 -0
- data/vendor/node_modules/browserify/test/field/string.js +1 -0
- data/vendor/node_modules/browserify/test/field/sub.js +1 -0
- data/vendor/node_modules/browserify/test/field.js +64 -0
- data/vendor/node_modules/browserify/test/file_event.js +33 -0
- data/vendor/node_modules/browserify/test/global/buffer.js +2 -0
- data/vendor/node_modules/browserify/test/global/filename.js +2 -0
- data/vendor/node_modules/browserify/test/global/main.js +2 -0
- data/vendor/node_modules/browserify/test/global/tick.js +3 -0
- data/vendor/node_modules/browserify/test/global.js +54 -0
- data/vendor/node_modules/browserify/test/ignore/main.js +1 -0
- data/vendor/node_modules/browserify/test/ignore/skip.js +1 -0
- data/vendor/node_modules/browserify/test/ignore.js +16 -0
- data/vendor/node_modules/browserify/test/json/beep.json +4 -0
- data/vendor/node_modules/browserify/test/json/main.js +1 -0
- data/vendor/node_modules/browserify/test/json.js +18 -0
- data/vendor/node_modules/browserify/test/maxlisteners/main.js +3 -0
- data/vendor/node_modules/browserify/test/maxlisteners.js +13 -0
- data/vendor/node_modules/browserify/test/multi_bundle/a.js +2 -0
- data/vendor/node_modules/browserify/test/multi_bundle/b.js +5 -0
- data/vendor/node_modules/browserify/test/multi_bundle.js +44 -0
- data/vendor/node_modules/browserify/test/multi_entry/a.js +2 -0
- data/vendor/node_modules/browserify/test/multi_entry/b.js +2 -0
- data/vendor/node_modules/browserify/test/multi_entry/c.js +2 -0
- data/vendor/node_modules/browserify/test/multi_entry.js +25 -0
- data/vendor/node_modules/browserify/test/node_modules/beep/index.js +1 -0
- data/vendor/node_modules/browserify/test/process/main.js +3 -0
- data/vendor/node_modules/browserify/test/process/one.js +1 -0
- data/vendor/node_modules/browserify/test/process/two.js +1 -0
- data/vendor/node_modules/browserify/test/process.js +20 -0
- data/vendor/node_modules/browserify/test/require_cache.js +19 -0
- data/vendor/node_modules/browserify/test/retarget.js +23 -0
- data/vendor/node_modules/browserify/test/reverse_multi_bundle/app.js +22 -0
- data/vendor/node_modules/browserify/test/reverse_multi_bundle/lazy.js +4 -0
- data/vendor/node_modules/browserify/test/reverse_multi_bundle/shared.js +4 -0
- data/vendor/node_modules/browserify/test/reverse_multi_bundle.js +43 -0
- data/vendor/node_modules/browserify/test/shebang/foo.js +2 -0
- data/vendor/node_modules/browserify/test/shebang/main.js +4 -0
- data/vendor/node_modules/browserify/test/shebang.js +11 -0
- data/vendor/node_modules/browserify/test/standalone/main.js +3 -0
- data/vendor/node_modules/browserify/test/standalone/one.js +1 -0
- data/vendor/node_modules/browserify/test/standalone/two.js +1 -0
- data/vendor/node_modules/browserify/test/standalone.js +73 -0
- data/vendor/node_modules/browserify/test/subdep/index.js +1 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/b.js +1 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/ignore_me.js +1 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/a/index.js +1 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/a/package.json +5 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/c/index.js +1 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/c/package.json +5 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/f/index.js +1 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/z/index.js +1 -0
- data/vendor/node_modules/browserify/test/subdep/node_modules/qq/package.json +3 -0
- data/vendor/node_modules/browserify/test/subdep/package.json +6 -0
- data/vendor/node_modules/browserify/test/subdep.js +16 -0
- data/vendor/node_modules/browserify/test/tr/f.js +1 -0
- data/vendor/node_modules/browserify/test/tr/main.js +7 -0
- data/vendor/node_modules/browserify/test/tr/node_modules/g/index.js +1 -0
- data/vendor/node_modules/browserify/test/tr/node_modules/g/node_modules/insert-ggg/index.js +7 -0
- data/vendor/node_modules/browserify/test/tr/node_modules/g/package.json +6 -0
- data/vendor/node_modules/browserify/test/tr/node_modules/insert-aaa/index.js +7 -0
- data/vendor/node_modules/browserify/test/tr/node_modules/insert-bbb/index.js +7 -0
- data/vendor/node_modules/browserify/test/tr/node_modules/m/index.js +3 -0
- data/vendor/node_modules/browserify/test/tr.js +21 -0
- data/vendor/node_modules/browserify/test/util.js +62 -0
- data/vendor/node_modules/wisp/History.md +152 -0
- data/vendor/node_modules/wisp/LICENSE +24 -0
- data/vendor/node_modules/wisp/Makefile +80 -0
- data/vendor/node_modules/wisp/Readme.md +615 -0
- data/vendor/node_modules/wisp/analyzer.js +385 -0
- data/vendor/node_modules/wisp/ast.js +214 -0
- data/vendor/node_modules/wisp/backend/javascript/writer.js +212 -0
- data/vendor/node_modules/wisp/bin/wisp.js +2 -0
- data/vendor/node_modules/wisp/compiler.js +1028 -0
- data/vendor/node_modules/wisp/design.md +114 -0
- data/vendor/node_modules/wisp/engine/browser.js +65 -0
- data/vendor/node_modules/wisp/engine/node.js +20 -0
- data/vendor/node_modules/wisp/index.html +405 -0
- data/vendor/node_modules/wisp/interactivate/Makefile +38 -0
- data/vendor/node_modules/wisp/interactivate/Readme.md +24 -0
- data/vendor/node_modules/wisp/interactivate/build/cache.manifest +12 -0
- data/vendor/node_modules/wisp/interactivate/build/codemirror-compressed.js +4 -0
- data/vendor/node_modules/wisp/interactivate/build/codemirror.css +248 -0
- data/vendor/node_modules/wisp/interactivate/build/main.js +5430 -0
- data/vendor/node_modules/wisp/interactivate/build/solarized.css +207 -0
- data/vendor/node_modules/wisp/interactivate/host.wisp +83 -0
- data/vendor/node_modules/wisp/interactivate/index.html +392 -0
- data/vendor/node_modules/wisp/interactivate/main.wisp +37 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/Readme.md +22 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/core.js +33 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/package.json +36 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/Readme.md +23 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/core.js +31 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/package.json +37 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/Readme.md +22 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/core.js +25 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/package.json +34 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/History.md +47 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/Readme.md +11 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/Readme.md +24 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/cache.manifest +12 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/codemirror-compressed.js +4 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/codemirror.css +248 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/main.js +267 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/solarized.css +207 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/index.html +115 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/main.js +39 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/Readme.md +22 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/core.js +33 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/package.json +36 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/Readme.md +23 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/core.js +31 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/package.json +37 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/Readme.md +22 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/core.js +25 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/package.json +34 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/package.json +21 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/host/window.js +19 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/interactivate.js +187 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/History.md +10 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/Readme.md +68 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/diff.js +45 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/index.js +5 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/package.json +53 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/patch.js +21 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/rebase.js +33 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/diff.js +62 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/index.js +16 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/patch.js +54 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/History.md +15 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/Readme.md +54 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/event.js +39 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/index.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/History.md +20 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/Readme.md +45 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/end.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/index.js +8 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-error.js +9 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-reduced.js +9 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/package.json +57 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduce.js +59 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduced.js +15 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reducible.js +87 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/index.js +6 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reduce.js +116 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reducible.js +106 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/package.json +56 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/test/index.js +91 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/History.md +60 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/Readme.md +125 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/core.js +227 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/package.json +93 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/browser.js +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/common-index.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/common.js +270 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/index.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/phantom-index.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/tap-index.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/testling-index.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/History.md +139 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/License.md +19 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/Readme.md +253 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/capture.js +34 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/concat.js +37 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/debug/print.js +45 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/delay.js +29 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop-while.js +39 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop.js +40 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/expand.js +25 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/filter.js +21 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/fold.js +55 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/hub.js +102 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/index.js +33 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/into.js +16 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/map.js +19 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/merge.js +50 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/History.md +20 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/License.md +18 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/Readme.md +45 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/end.js +3 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/index.js +8 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-error.js +9 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-reduced.js +9 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/package.json +57 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduce.js +59 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduced.js +15 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reducible.js +87 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/index.js +6 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reduce.js +116 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reducible.js +106 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/package.json +60 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/reducer.js +51 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/reductions.js +31 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/take-while.js +23 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/take.js +40 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/benchmark.js +32 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/capture.js +108 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/concat.js +104 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/delay.js +29 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop-while.js +118 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop.js +89 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/errors.js +222 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/filter.js +72 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/fold.js +111 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/hub.js +222 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/index.js +23 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/into.js +22 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/map.js +67 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/merge.js +75 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/reductions.js +105 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take-while.js +134 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take.js +82 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/event.js +25 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/lazy.js +9 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/test.js +34 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/output.js +60 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/package.json +30 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/render.js +23 -0
- data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/view.js +79 -0
- data/vendor/node_modules/wisp/interactivate/package.json +22 -0
- data/vendor/node_modules/wisp/package.json +61 -0
- data/vendor/node_modules/wisp/reader.js +785 -0
- data/vendor/node_modules/wisp/repl.js +121 -0
- data/vendor/node_modules/wisp/runtime.js +609 -0
- data/vendor/node_modules/wisp/sequence.js +553 -0
- data/vendor/node_modules/wisp/src/ast.wisp +160 -0
- data/vendor/node_modules/wisp/src/backend/javascript/writer.wisp +161 -0
- data/vendor/node_modules/wisp/src/backend/js/generator.wisp +939 -0
- data/vendor/node_modules/wisp/src/compiler.wisp +1185 -0
- data/vendor/node_modules/wisp/src/drafts.wisp +50 -0
- data/vendor/node_modules/wisp/src/drft.wisp +329 -0
- data/vendor/node_modules/wisp/src/engine/browser.wisp +73 -0
- data/vendor/node_modules/wisp/src/engine/node.wisp +23 -0
- data/vendor/node_modules/wisp/src/extra.wisp +36 -0
- data/vendor/node_modules/wisp/src/reader.wisp +615 -0
- data/vendor/node_modules/wisp/src/repl.wisp +79 -0
- data/vendor/node_modules/wisp/src/runtime.wisp +511 -0
- data/vendor/node_modules/wisp/src/sequence.wisp +416 -0
- data/vendor/node_modules/wisp/src/string.wisp +110 -0
- data/vendor/node_modules/wisp/src/type.wisp +51 -0
- data/vendor/node_modules/wisp/src/wisp.wisp +57 -0
- data/vendor/node_modules/wisp/string.js +96 -0
- data/vendor/node_modules/wisp/support/ambiance.css +119 -0
- data/vendor/node_modules/wisp/support/app.js +3669 -0
- data/vendor/node_modules/wisp/support/codemirror-compressed.js +1 -0
- data/vendor/node_modules/wisp/support/codemirror.css +173 -0
- data/vendor/node_modules/wisp/support/embed.js +71 -0
- data/vendor/node_modules/wisp/support/embed.wisp +74 -0
- data/vendor/node_modules/wisp/support/require.js +35 -0
- data/vendor/node_modules/wisp/test/ast.wisp +58 -0
- data/vendor/node_modules/wisp/test/compiler.wisp +549 -0
- data/vendor/node_modules/wisp/test/reader.wisp +228 -0
- data/vendor/node_modules/wisp/test/runtime.wisp +180 -0
- data/vendor/node_modules/wisp/test/sequence.wisp +338 -0
- data/vendor/node_modules/wisp/test/string.wisp +44 -0
- data/vendor/node_modules/wisp/test/test.wisp +8 -0
- data/vendor/node_modules/wisp/wisp.js +60 -0
- data/vendor/package.json +39 -0
- data/vendor/reader.js +784 -0
- data/vendor/repl.js +116 -0
- data/vendor/runtime.js +613 -0
- data/vendor/sequence.js +555 -0
- data/vendor/src/ast.wisp +162 -0
- data/vendor/src/backend/escodegen/writer.wisp +939 -0
- data/vendor/src/backend/javascript/writer.wisp +164 -0
- data/vendor/src/compiler.wisp +1191 -0
- data/vendor/src/drafts/drafts.wisp +50 -0
- data/vendor/src/drafts/drft.wisp +329 -0
- data/vendor/src/drafts/extra.wisp +36 -0
- data/vendor/src/engine/browser.wisp +67 -0
- data/vendor/src/engine/node.wisp +16 -0
- data/vendor/src/functional-reader.wisp +96 -0
- data/vendor/src/reader.wisp +619 -0
- data/vendor/src/repl.wisp +80 -0
- data/vendor/src/runtime.wisp +512 -0
- data/vendor/src/sequence.wisp +417 -0
- data/vendor/src/string.wisp +111 -0
- data/vendor/src/type.wisp +54 -0
- data/vendor/src/wisp.wisp +58 -0
- data/vendor/string.js +97 -0
- data/vendor/test/ast.wisp +60 -0
- data/vendor/test/compiler.wisp +552 -0
- data/vendor/test/reader.wisp +228 -0
- data/vendor/test/runtime.wisp +180 -0
- data/vendor/test/sequence.wisp +337 -0
- data/vendor/test/string.wisp +45 -0
- data/vendor/test/test.wisp +9 -0
- data/vendor/try/Makefile +27 -0
- data/vendor/try/Readme.md +25 -0
- data/vendor/try/build/codemirror-compressed.js +4 -0
- data/vendor/try/build/codemirror.css +248 -0
- data/vendor/try/build/main.js +3742 -0
- data/vendor/try/build/require.js +35 -0
- data/vendor/try/build/solarized.css +203 -0
- data/vendor/try/index.html +399 -0
- data/vendor/try/node_modules/codemirror-activine/License.md +18 -0
- data/vendor/try/node_modules/codemirror-activine/Readme.md +22 -0
- data/vendor/try/node_modules/codemirror-activine/core.js +33 -0
- data/vendor/try/node_modules/codemirror-activine/package.json +36 -0
- data/vendor/try/node_modules/codemirror-persist/License.md +18 -0
- data/vendor/try/node_modules/codemirror-persist/Readme.md +22 -0
- data/vendor/try/node_modules/codemirror-persist/core.js +25 -0
- data/vendor/try/node_modules/codemirror-persist/package.json +34 -0
- data/vendor/try/node_modules/~wisp/History.md +152 -0
- data/vendor/try/node_modules/~wisp/LICENSE +24 -0
- data/vendor/try/node_modules/~wisp/Makefile +80 -0
- data/vendor/try/node_modules/~wisp/Readme.md +615 -0
- data/vendor/try/node_modules/~wisp/analyzer.js +385 -0
- data/vendor/try/node_modules/~wisp/ast.js +214 -0
- data/vendor/try/node_modules/~wisp/backend/javascript/writer.js +212 -0
- data/vendor/try/node_modules/~wisp/bin/wisp.js +2 -0
- data/vendor/try/node_modules/~wisp/compiler.js +1028 -0
- data/vendor/try/node_modules/~wisp/design.md +114 -0
- data/vendor/try/node_modules/~wisp/engine/browser.js +65 -0
- data/vendor/try/node_modules/~wisp/engine/node.js +20 -0
- data/vendor/try/node_modules/~wisp/index.html +405 -0
- data/vendor/try/node_modules/~wisp/interactivate/Makefile +38 -0
- data/vendor/try/node_modules/~wisp/interactivate/Readme.md +24 -0
- data/vendor/try/node_modules/~wisp/interactivate/build/cache.manifest +12 -0
- data/vendor/try/node_modules/~wisp/interactivate/build/codemirror-compressed.js +4 -0
- data/vendor/try/node_modules/~wisp/interactivate/build/codemirror.css +248 -0
- data/vendor/try/node_modules/~wisp/interactivate/build/main.js +5430 -0
- data/vendor/try/node_modules/~wisp/interactivate/build/solarized.css +207 -0
- data/vendor/try/node_modules/~wisp/interactivate/host.wisp +83 -0
- data/vendor/try/node_modules/~wisp/interactivate/index.html +392 -0
- data/vendor/try/node_modules/~wisp/interactivate/main.wisp +37 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/Readme.md +22 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/core.js +33 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/package.json +36 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/Readme.md +23 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/core.js +31 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/package.json +37 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/Readme.md +22 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/core.js +25 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/package.json +34 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/History.md +47 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/Readme.md +11 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/Readme.md +24 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/cache.manifest +12 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/codemirror-compressed.js +4 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/codemirror.css +248 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/main.js +267 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/solarized.css +207 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/index.html +115 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/main.js +39 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/Readme.md +22 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/core.js +33 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/package.json +36 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/Readme.md +23 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/core.js +31 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/package.json +37 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/Readme.md +22 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/core.js +25 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/package.json +34 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/package.json +21 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/host/window.js +19 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/interactivate.js +187 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/History.md +10 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/Readme.md +68 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/diff.js +45 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/index.js +5 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/package.json +53 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/patch.js +21 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/rebase.js +33 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/diff.js +62 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/index.js +16 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/patch.js +54 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/History.md +15 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/Readme.md +54 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/event.js +39 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/index.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/History.md +20 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/Readme.md +45 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/end.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/index.js +8 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-error.js +9 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-reduced.js +9 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/package.json +57 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduce.js +59 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduced.js +15 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reducible.js +87 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/index.js +6 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reduce.js +116 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reducible.js +106 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/package.json +56 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/test/index.js +91 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/History.md +60 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/Readme.md +125 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/core.js +227 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/package.json +93 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/browser.js +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/common-index.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/common.js +270 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/index.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/phantom-index.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/tap-index.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/testling-index.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/History.md +139 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/License.md +19 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/Readme.md +253 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/capture.js +34 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/concat.js +37 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/debug/print.js +45 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/delay.js +29 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop-while.js +39 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop.js +40 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/expand.js +25 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/filter.js +21 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/fold.js +55 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/hub.js +102 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/index.js +33 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/into.js +16 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/map.js +19 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/merge.js +50 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/History.md +20 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/License.md +18 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/Readme.md +45 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/end.js +3 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/index.js +8 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-error.js +9 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-reduced.js +9 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/package.json +57 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduce.js +59 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduced.js +15 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reducible.js +87 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/index.js +6 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reduce.js +116 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reducible.js +106 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/package.json +60 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/reducer.js +51 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/reductions.js +31 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/take-while.js +23 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/take.js +40 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/benchmark.js +32 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/capture.js +108 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/concat.js +104 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/delay.js +29 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop-while.js +118 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop.js +89 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/errors.js +222 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/filter.js +72 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/fold.js +111 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/hub.js +222 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/index.js +23 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/into.js +22 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/map.js +67 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/merge.js +75 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/reductions.js +105 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take-while.js +134 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take.js +82 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/event.js +25 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/lazy.js +9 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/test.js +34 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/output.js +60 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/package.json +30 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/render.js +23 -0
- data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/view.js +79 -0
- data/vendor/try/node_modules/~wisp/interactivate/package.json +22 -0
- data/vendor/try/node_modules/~wisp/package.json +57 -0
- data/vendor/try/node_modules/~wisp/reader.js +785 -0
- data/vendor/try/node_modules/~wisp/repl.js +121 -0
- data/vendor/try/node_modules/~wisp/runtime.js +609 -0
- data/vendor/try/node_modules/~wisp/sequence.js +553 -0
- data/vendor/try/node_modules/~wisp/src/ast.wisp +160 -0
- data/vendor/try/node_modules/~wisp/src/backend/javascript/writer.wisp +161 -0
- data/vendor/try/node_modules/~wisp/src/backend/js/generator.wisp +939 -0
- data/vendor/try/node_modules/~wisp/src/compiler.wisp +1185 -0
- data/vendor/try/node_modules/~wisp/src/drafts.wisp +50 -0
- data/vendor/try/node_modules/~wisp/src/drft.wisp +329 -0
- data/vendor/try/node_modules/~wisp/src/engine/browser.wisp +73 -0
- data/vendor/try/node_modules/~wisp/src/engine/node.wisp +23 -0
- data/vendor/try/node_modules/~wisp/src/extra.wisp +36 -0
- data/vendor/try/node_modules/~wisp/src/reader.wisp +615 -0
- data/vendor/try/node_modules/~wisp/src/repl.wisp +79 -0
- data/vendor/try/node_modules/~wisp/src/runtime.wisp +511 -0
- data/vendor/try/node_modules/~wisp/src/sequence.wisp +416 -0
- data/vendor/try/node_modules/~wisp/src/string.wisp +110 -0
- data/vendor/try/node_modules/~wisp/src/type.wisp +51 -0
- data/vendor/try/node_modules/~wisp/src/wisp.wisp +57 -0
- data/vendor/try/node_modules/~wisp/string.js +96 -0
- data/vendor/try/node_modules/~wisp/support/ambiance.css +119 -0
- data/vendor/try/node_modules/~wisp/support/app.js +3669 -0
- data/vendor/try/node_modules/~wisp/support/codemirror-compressed.js +1 -0
- data/vendor/try/node_modules/~wisp/support/codemirror.css +173 -0
- data/vendor/try/node_modules/~wisp/support/embed.js +71 -0
- data/vendor/try/node_modules/~wisp/support/embed.wisp +74 -0
- data/vendor/try/node_modules/~wisp/support/require.js +35 -0
- data/vendor/try/node_modules/~wisp/test/ast.wisp +58 -0
- data/vendor/try/node_modules/~wisp/test/compiler.wisp +549 -0
- data/vendor/try/node_modules/~wisp/test/reader.wisp +228 -0
- data/vendor/try/node_modules/~wisp/test/runtime.wisp +180 -0
- data/vendor/try/node_modules/~wisp/test/sequence.wisp +338 -0
- data/vendor/try/node_modules/~wisp/test/string.wisp +44 -0
- data/vendor/try/node_modules/~wisp/test/test.wisp +8 -0
- data/vendor/try/node_modules/~wisp/wisp.js +60 -0
- data/vendor/try/package.json +19 -0
- data/vendor/try/src/main.wisp +89 -0
- data/vendor/wisp.js +55 -0
- metadata +1727 -0
@@ -0,0 +1,3669 @@
|
|
1
|
+
require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
|
2
|
+
var rest = (require("wisp/sequence")).rest;;
|
3
|
+
|
4
|
+
var str = (require("wisp/runtime")).str;;
|
5
|
+
|
6
|
+
var transpile = (require("wisp/engine/browser")).transpile;;
|
7
|
+
|
8
|
+
var readFromString = (require("wisp/reader")).readFromString;;
|
9
|
+
|
10
|
+
var compileProgram = (require("wisp/compiler")).compileProgram;;
|
11
|
+
|
12
|
+
var updatePreview = function updatePreview(editor) {
|
13
|
+
clearTimeout(updatePreview.id);
|
14
|
+
return (function() {
|
15
|
+
var code = editor.getValue();
|
16
|
+
localStorage.buffer = code;
|
17
|
+
return updatePreview.id = setTimeout(function() {
|
18
|
+
return (function() {
|
19
|
+
try {
|
20
|
+
editor.clearMarker(updatePreview.line || 1);
|
21
|
+
return output.setValue(transpile(code));
|
22
|
+
} catch (error) {
|
23
|
+
updatePreview.line = error.line;
|
24
|
+
return editor.setMarker(error.line || 0, "" + "<span title='" + error.message + "'>●</span> %N%");
|
25
|
+
}})();
|
26
|
+
}, 200);
|
27
|
+
})();
|
28
|
+
};
|
29
|
+
exports.updatePreview = updatePreview;
|
30
|
+
|
31
|
+
var input = CodeMirror(document.getElementById("input"), {
|
32
|
+
"lineNumbers": true,
|
33
|
+
"autoClearEmptyLines": true,
|
34
|
+
"tabSize": 2,
|
35
|
+
"indentWithTabs": false,
|
36
|
+
"electricChars": true,
|
37
|
+
"mode": "clojure",
|
38
|
+
"theme": "ambiance",
|
39
|
+
"autofocus": true,
|
40
|
+
"fixedGutter": true,
|
41
|
+
"matchBrackets": true,
|
42
|
+
"value": localStorage.buffer || ((document.getElementById("examples")).innerHTML),
|
43
|
+
"onChange": updatePreview,
|
44
|
+
"onCursorActivity": function() {
|
45
|
+
input.setLineClass(hlLine, null, null);
|
46
|
+
return hlLine = input.setLineClass((input.getCursor()).line, null, "activeline");
|
47
|
+
},
|
48
|
+
"onGutterClick": function() {
|
49
|
+
var output = document.getElementById("output");
|
50
|
+
var input = document.getElementById("input");
|
51
|
+
output.hidden = !(output.hidden);
|
52
|
+
return input.style.width = output.hidden ?
|
53
|
+
"100%" :
|
54
|
+
"50%";
|
55
|
+
}
|
56
|
+
});
|
57
|
+
exports.input = input;
|
58
|
+
|
59
|
+
var hlLine = input.setLineClass(0, void(0), "activeline");
|
60
|
+
exports.hlLine = hlLine;
|
61
|
+
|
62
|
+
var output = CodeMirror(document.getElementById("output"), {
|
63
|
+
"lineNumbers": true,
|
64
|
+
"fixedGutter": true,
|
65
|
+
"matchBrackets": true,
|
66
|
+
"mode": "javascript",
|
67
|
+
"theme": "ambiance",
|
68
|
+
"readOnly": true
|
69
|
+
});
|
70
|
+
exports.output = output;
|
71
|
+
|
72
|
+
setTimeout(updatePreview, 1000, input)
|
73
|
+
|
74
|
+
},{"wisp/sequence":"zNvMnP","wisp/runtime":"+Sggh0","wisp/engine/browser":"8GaiHy","wisp/reader":"CX0B04","wisp/compiler":"/EiAl9"}],"wisp/runtime":[function(require,module,exports){
|
75
|
+
module.exports=require('+Sggh0');
|
76
|
+
},{}],"+Sggh0":[function(require,module,exports){
|
77
|
+
(function(){var identity = function identity(x) {
|
78
|
+
return x;
|
79
|
+
};
|
80
|
+
exports.identity = identity;
|
81
|
+
|
82
|
+
var isOdd = function isOdd(n) {
|
83
|
+
return n % 2 === 1;
|
84
|
+
};
|
85
|
+
exports.isOdd = isOdd;
|
86
|
+
|
87
|
+
var isEven = function isEven(n) {
|
88
|
+
return n % 2 === 0;
|
89
|
+
};
|
90
|
+
exports.isEven = isEven;
|
91
|
+
|
92
|
+
var isDictionary = function isDictionary(form) {
|
93
|
+
return (isObject(form)) && (isObject(Object.getPrototypeOf(form))) && (isNil(Object.getPrototypeOf(Object.getPrototypeOf(form))));
|
94
|
+
};
|
95
|
+
exports.isDictionary = isDictionary;
|
96
|
+
|
97
|
+
var dictionary = function dictionary() {
|
98
|
+
return (function loop(keyValues, result) {
|
99
|
+
var recur = loop;
|
100
|
+
while (recur === loop) {
|
101
|
+
recur = keyValues.length ?
|
102
|
+
(function() {
|
103
|
+
(result || 0)[(keyValues || 0)[0]] = (keyValues || 0)[1];
|
104
|
+
return (keyValues = keyValues.slice(2), result = result, loop);
|
105
|
+
})() :
|
106
|
+
result;
|
107
|
+
};
|
108
|
+
return recur;
|
109
|
+
})(Array.prototype.slice.call(arguments), {});
|
110
|
+
};
|
111
|
+
exports.dictionary = dictionary;
|
112
|
+
|
113
|
+
var keys = function keys(dictionary) {
|
114
|
+
return Object.keys(dictionary);
|
115
|
+
};
|
116
|
+
exports.keys = keys;
|
117
|
+
|
118
|
+
var vals = function vals(dictionary) {
|
119
|
+
return keys(dictionary).map(function(key) {
|
120
|
+
return (dictionary || 0)[key];
|
121
|
+
});
|
122
|
+
};
|
123
|
+
exports.vals = vals;
|
124
|
+
|
125
|
+
var keyValues = function keyValues(dictionary) {
|
126
|
+
return keys(dictionary).map(function(key) {
|
127
|
+
return [key, (dictionary || 0)[key]];
|
128
|
+
});
|
129
|
+
};
|
130
|
+
exports.keyValues = keyValues;
|
131
|
+
|
132
|
+
var merge = function merge() {
|
133
|
+
return Object.create(Object.prototype, Array.prototype.slice.call(arguments).reduce(function(descriptor, dictionary) {
|
134
|
+
isObject(dictionary) ?
|
135
|
+
Object.keys(dictionary).forEach(function(key) {
|
136
|
+
return (descriptor || 0)[key] = Object.getOwnPropertyDescriptor(dictionary, key);
|
137
|
+
}) :
|
138
|
+
void(0);
|
139
|
+
return descriptor;
|
140
|
+
}, Object.create(Object.prototype)));
|
141
|
+
};
|
142
|
+
exports.merge = merge;
|
143
|
+
|
144
|
+
var isContainsVector = function isContainsVector(vector, element) {
|
145
|
+
return vector.indexOf(element) >= 0;
|
146
|
+
};
|
147
|
+
exports.isContainsVector = isContainsVector;
|
148
|
+
|
149
|
+
var mapDictionary = function mapDictionary(source, f) {
|
150
|
+
return Object.keys(source).reduce(function(target, key) {
|
151
|
+
(target || 0)[key] = f((source || 0)[key]);
|
152
|
+
return target;
|
153
|
+
}, {});
|
154
|
+
};
|
155
|
+
exports.mapDictionary = mapDictionary;
|
156
|
+
|
157
|
+
var toString = Object.prototype.toString;
|
158
|
+
exports.toString = toString;
|
159
|
+
|
160
|
+
var isFn = typeof(/./) === "function" ?
|
161
|
+
function isFn(x) {
|
162
|
+
return toString.call(x) === "[object Function]";
|
163
|
+
} :
|
164
|
+
function isFn(x) {
|
165
|
+
return typeof(x) === "function";
|
166
|
+
};
|
167
|
+
exports.isFn = isFn;
|
168
|
+
|
169
|
+
var isString = function isString(x) {
|
170
|
+
return (typeof(x) === "string") || (toString.call(x) === "[object String]");
|
171
|
+
};
|
172
|
+
exports.isString = isString;
|
173
|
+
|
174
|
+
var isNumber = function isNumber(x) {
|
175
|
+
return (typeof(x) === "number") || (toString.call(x) === "[object Number]");
|
176
|
+
};
|
177
|
+
exports.isNumber = isNumber;
|
178
|
+
|
179
|
+
var isVector = isFn(Array.isArray) ?
|
180
|
+
Array.isArray :
|
181
|
+
function isVector(x) {
|
182
|
+
return toString.call(x) === "[object Array]";
|
183
|
+
};
|
184
|
+
exports.isVector = isVector;
|
185
|
+
|
186
|
+
var isDate = function isDate(x) {
|
187
|
+
return toString.call(x) === "[object Date]";
|
188
|
+
};
|
189
|
+
exports.isDate = isDate;
|
190
|
+
|
191
|
+
var isBoolean = function isBoolean(x) {
|
192
|
+
return (x === true) || (x === false) || (toString.call(x) === "[object Boolean]");
|
193
|
+
};
|
194
|
+
exports.isBoolean = isBoolean;
|
195
|
+
|
196
|
+
var isRePattern = function isRePattern(x) {
|
197
|
+
return toString.call(x) === "[object RegExp]";
|
198
|
+
};
|
199
|
+
exports.isRePattern = isRePattern;
|
200
|
+
|
201
|
+
var isObject = function isObject(x) {
|
202
|
+
return x && (typeof(x) === "object");
|
203
|
+
};
|
204
|
+
exports.isObject = isObject;
|
205
|
+
|
206
|
+
var isNil = function isNil(x) {
|
207
|
+
return (x === void(0)) || (x === null);
|
208
|
+
};
|
209
|
+
exports.isNil = isNil;
|
210
|
+
|
211
|
+
var isTrue = function isTrue(x) {
|
212
|
+
return x === true;
|
213
|
+
};
|
214
|
+
exports.isTrue = isTrue;
|
215
|
+
|
216
|
+
var isFalse = function isFalse(x) {
|
217
|
+
return x === true;
|
218
|
+
};
|
219
|
+
exports.isFalse = isFalse;
|
220
|
+
|
221
|
+
var reFind = function reFind(re, s) {
|
222
|
+
var matches = re.exec(s);
|
223
|
+
return !(isNil(matches)) ?
|
224
|
+
matches.length === 1 ?
|
225
|
+
(matches || 0)[0] :
|
226
|
+
matches :
|
227
|
+
void(0);
|
228
|
+
};
|
229
|
+
exports.reFind = reFind;
|
230
|
+
|
231
|
+
var reMatches = function reMatches(pattern, source) {
|
232
|
+
var matches = pattern.exec(source);
|
233
|
+
return (!(isNil(matches))) && ((matches || 0)[0] === source) ?
|
234
|
+
matches.length === 1 ?
|
235
|
+
(matches || 0)[0] :
|
236
|
+
matches :
|
237
|
+
void(0);
|
238
|
+
};
|
239
|
+
exports.reMatches = reMatches;
|
240
|
+
|
241
|
+
var rePattern = function rePattern(s) {
|
242
|
+
var match = reFind(/^(?:\(\?([idmsux]*)\))?(.*)/, s);
|
243
|
+
return new RegExp((match || 0)[2], (match || 0)[1]);
|
244
|
+
};
|
245
|
+
exports.rePattern = rePattern;
|
246
|
+
|
247
|
+
var inc = function inc(x) {
|
248
|
+
return x + 1;
|
249
|
+
};
|
250
|
+
exports.inc = inc;
|
251
|
+
|
252
|
+
var dec = function dec(x) {
|
253
|
+
return x - 1;
|
254
|
+
};
|
255
|
+
exports.dec = dec;
|
256
|
+
|
257
|
+
var str = function str() {
|
258
|
+
return String.prototype.concat.apply("", arguments);
|
259
|
+
};
|
260
|
+
exports.str = str;
|
261
|
+
|
262
|
+
var char = function char(code) {
|
263
|
+
return String.fromCharCode(code);
|
264
|
+
};
|
265
|
+
exports.char = char;
|
266
|
+
|
267
|
+
var int = function int(x) {
|
268
|
+
return isNumber(x) ?
|
269
|
+
x >= 0 ?
|
270
|
+
Math.floor(x) :
|
271
|
+
Math.floor(x) :
|
272
|
+
x.charCodeAt(0);
|
273
|
+
};
|
274
|
+
exports.int = int;
|
275
|
+
|
276
|
+
var subs = function subs(string, start, end) {
|
277
|
+
return string.substring(start, end);
|
278
|
+
};
|
279
|
+
exports.subs = subs;
|
280
|
+
|
281
|
+
var isPatternEqual = function isPatternEqual(x, y) {
|
282
|
+
return (isRePattern(x)) && (isRePattern(y)) && (x.source === y.source) && (x.global === y.global) && (x.multiline === y.multiline) && (x.ignoreCase === y.ignoreCase);
|
283
|
+
};
|
284
|
+
|
285
|
+
var isDateEqual = function isDateEqual(x, y) {
|
286
|
+
return (isDate(x)) && (isDate(y)) && (Number(x) === Number(y));
|
287
|
+
};
|
288
|
+
|
289
|
+
var isDictionaryEqual = function isDictionaryEqual(x, y) {
|
290
|
+
return (isObject(x)) && (isObject(y)) && ((function() {
|
291
|
+
var xKeys = keys(x);
|
292
|
+
var yKeys = keys(y);
|
293
|
+
var xCount = xKeys.length;
|
294
|
+
var yCount = yKeys.length;
|
295
|
+
return (xCount === yCount) && ((function loop(index, count, keys) {
|
296
|
+
var recur = loop;
|
297
|
+
while (recur === loop) {
|
298
|
+
recur = index < count ?
|
299
|
+
isEquivalent((x || 0)[(keys || 0)[index]], (y || 0)[(keys || 0)[index]]) ?
|
300
|
+
(index = inc(index), count = count, keys = keys, loop) :
|
301
|
+
false :
|
302
|
+
true;
|
303
|
+
};
|
304
|
+
return recur;
|
305
|
+
})(0, xCount, xKeys));
|
306
|
+
})());
|
307
|
+
};
|
308
|
+
|
309
|
+
var isVectorEqual = function isVectorEqual(x, y) {
|
310
|
+
return (isVector(x)) && (isVector(y)) && (x.length === y.length) && ((function loop(xs, ys, index, count) {
|
311
|
+
var recur = loop;
|
312
|
+
while (recur === loop) {
|
313
|
+
recur = index < count ?
|
314
|
+
isEquivalent((xs || 0)[index], (ys || 0)[index]) ?
|
315
|
+
(xs = xs, ys = ys, index = inc(index), count = count, loop) :
|
316
|
+
false :
|
317
|
+
true;
|
318
|
+
};
|
319
|
+
return recur;
|
320
|
+
})(x, y, 0, x.length));
|
321
|
+
};
|
322
|
+
|
323
|
+
var isEquivalent = function isEquivalent(x, y) {
|
324
|
+
switch (arguments.length) {
|
325
|
+
case 1:
|
326
|
+
return true;
|
327
|
+
case 2:
|
328
|
+
return (x === y) || (isNil(x) ?
|
329
|
+
isNil(y) :
|
330
|
+
isNil(y) ?
|
331
|
+
isNil(x) :
|
332
|
+
isString(x) ?
|
333
|
+
false :
|
334
|
+
isNumber(x) ?
|
335
|
+
false :
|
336
|
+
isFn(x) ?
|
337
|
+
false :
|
338
|
+
isBoolean(x) ?
|
339
|
+
false :
|
340
|
+
isDate(x) ?
|
341
|
+
isDateEqual(x, y) :
|
342
|
+
isVector(x) ?
|
343
|
+
isVectorEqual(x, y, [], []) :
|
344
|
+
isRePattern(x) ?
|
345
|
+
isPatternEqual(x, y) :
|
346
|
+
"else" ?
|
347
|
+
isDictionaryEqual(x, y) :
|
348
|
+
void(0));
|
349
|
+
|
350
|
+
default:
|
351
|
+
var more = Array.prototype.slice.call(arguments, 2);
|
352
|
+
return (function loop(previous, current, index, count) {
|
353
|
+
var recur = loop;
|
354
|
+
while (recur === loop) {
|
355
|
+
recur = (isEquivalent(previous, current)) && (index < count ?
|
356
|
+
(previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
|
357
|
+
true);
|
358
|
+
};
|
359
|
+
return recur;
|
360
|
+
})(x, y, 0, more.length);
|
361
|
+
};
|
362
|
+
return void(0);
|
363
|
+
};
|
364
|
+
|
365
|
+
var isEqual = isEquivalent;
|
366
|
+
exports.isEqual = isEqual;
|
367
|
+
|
368
|
+
var isStrictEqual = function isStrictEqual(x, y) {
|
369
|
+
switch (arguments.length) {
|
370
|
+
case 1:
|
371
|
+
return true;
|
372
|
+
case 2:
|
373
|
+
return x === y;
|
374
|
+
|
375
|
+
default:
|
376
|
+
var more = Array.prototype.slice.call(arguments, 2);
|
377
|
+
return (function loop(previous, current, index, count) {
|
378
|
+
var recur = loop;
|
379
|
+
while (recur === loop) {
|
380
|
+
recur = (previous === current) && (index < count ?
|
381
|
+
(previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
|
382
|
+
true);
|
383
|
+
};
|
384
|
+
return recur;
|
385
|
+
})(x, y, 0, more.length);
|
386
|
+
};
|
387
|
+
return void(0);
|
388
|
+
};
|
389
|
+
exports.isStrictEqual = isStrictEqual;
|
390
|
+
|
391
|
+
var greaterThan = function greaterThan(x, y) {
|
392
|
+
switch (arguments.length) {
|
393
|
+
case 1:
|
394
|
+
return true;
|
395
|
+
case 2:
|
396
|
+
return x > y;
|
397
|
+
|
398
|
+
default:
|
399
|
+
var more = Array.prototype.slice.call(arguments, 2);
|
400
|
+
return (function loop(previous, current, index, count) {
|
401
|
+
var recur = loop;
|
402
|
+
while (recur === loop) {
|
403
|
+
recur = (previous > current) && (index < count ?
|
404
|
+
(previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
|
405
|
+
true);
|
406
|
+
};
|
407
|
+
return recur;
|
408
|
+
})(x, y, 0, more.length);
|
409
|
+
};
|
410
|
+
return void(0);
|
411
|
+
};
|
412
|
+
exports.greaterThan = greaterThan;
|
413
|
+
|
414
|
+
var notLessThan = function notLessThan(x, y) {
|
415
|
+
switch (arguments.length) {
|
416
|
+
case 1:
|
417
|
+
return true;
|
418
|
+
case 2:
|
419
|
+
return x >= y;
|
420
|
+
|
421
|
+
default:
|
422
|
+
var more = Array.prototype.slice.call(arguments, 2);
|
423
|
+
return (function loop(previous, current, index, count) {
|
424
|
+
var recur = loop;
|
425
|
+
while (recur === loop) {
|
426
|
+
recur = (previous >= current) && (index < count ?
|
427
|
+
(previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
|
428
|
+
true);
|
429
|
+
};
|
430
|
+
return recur;
|
431
|
+
})(x, y, 0, more.length);
|
432
|
+
};
|
433
|
+
return void(0);
|
434
|
+
};
|
435
|
+
exports.notLessThan = notLessThan;
|
436
|
+
|
437
|
+
var lessThan = function lessThan(x, y) {
|
438
|
+
switch (arguments.length) {
|
439
|
+
case 1:
|
440
|
+
return true;
|
441
|
+
case 2:
|
442
|
+
return x < y;
|
443
|
+
|
444
|
+
default:
|
445
|
+
var more = Array.prototype.slice.call(arguments, 2);
|
446
|
+
return (function loop(previous, current, index, count) {
|
447
|
+
var recur = loop;
|
448
|
+
while (recur === loop) {
|
449
|
+
recur = (previous < current) && (index < count ?
|
450
|
+
(previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
|
451
|
+
true);
|
452
|
+
};
|
453
|
+
return recur;
|
454
|
+
})(x, y, 0, more.length);
|
455
|
+
};
|
456
|
+
return void(0);
|
457
|
+
};
|
458
|
+
exports.lessThan = lessThan;
|
459
|
+
|
460
|
+
var notGreaterThan = function notGreaterThan(x, y) {
|
461
|
+
switch (arguments.length) {
|
462
|
+
case 1:
|
463
|
+
return true;
|
464
|
+
case 2:
|
465
|
+
return x <= y;
|
466
|
+
|
467
|
+
default:
|
468
|
+
var more = Array.prototype.slice.call(arguments, 2);
|
469
|
+
return (function loop(previous, current, index, count) {
|
470
|
+
var recur = loop;
|
471
|
+
while (recur === loop) {
|
472
|
+
recur = (previous <= current) && (index < count ?
|
473
|
+
(previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
|
474
|
+
true);
|
475
|
+
};
|
476
|
+
return recur;
|
477
|
+
})(x, y, 0, more.length);
|
478
|
+
};
|
479
|
+
return void(0);
|
480
|
+
};
|
481
|
+
exports.notGreaterThan = notGreaterThan;
|
482
|
+
|
483
|
+
var sum = function sum(a, b, c, d, e, f) {
|
484
|
+
switch (arguments.length) {
|
485
|
+
case 0:
|
486
|
+
return 0;
|
487
|
+
case 1:
|
488
|
+
return a;
|
489
|
+
case 2:
|
490
|
+
return a + b;
|
491
|
+
case 3:
|
492
|
+
return a + b + c;
|
493
|
+
case 4:
|
494
|
+
return a + b + c + d;
|
495
|
+
case 5:
|
496
|
+
return a + b + c + d + e;
|
497
|
+
case 6:
|
498
|
+
return a + b + c + d + e + f;
|
499
|
+
|
500
|
+
default:
|
501
|
+
var more = Array.prototype.slice.call(arguments, 6);
|
502
|
+
return (function loop(value, index, count) {
|
503
|
+
var recur = loop;
|
504
|
+
while (recur === loop) {
|
505
|
+
recur = index < count ?
|
506
|
+
(value = value + ((more || 0)[index]), index = inc(index), count = count, loop) :
|
507
|
+
value;
|
508
|
+
};
|
509
|
+
return recur;
|
510
|
+
})(a + b + c + d + e + f, 0, more.length);
|
511
|
+
};
|
512
|
+
return void(0);
|
513
|
+
};
|
514
|
+
exports.sum = sum;
|
515
|
+
|
516
|
+
var subtract = function subtract(a, b, c, d, e, f) {
|
517
|
+
switch (arguments.length) {
|
518
|
+
case 0:
|
519
|
+
return (function() { throw TypeError("Wrong number of args passed to: -"); })();
|
520
|
+
case 1:
|
521
|
+
return 0 - a;
|
522
|
+
case 2:
|
523
|
+
return a - b;
|
524
|
+
case 3:
|
525
|
+
return a - b - c;
|
526
|
+
case 4:
|
527
|
+
return a - b - c - d;
|
528
|
+
case 5:
|
529
|
+
return a - b - c - d - e;
|
530
|
+
case 6:
|
531
|
+
return a - b - c - d - e - f;
|
532
|
+
|
533
|
+
default:
|
534
|
+
var more = Array.prototype.slice.call(arguments, 6);
|
535
|
+
return (function loop(value, index, count) {
|
536
|
+
var recur = loop;
|
537
|
+
while (recur === loop) {
|
538
|
+
recur = index < count ?
|
539
|
+
(value = value - ((more || 0)[index]), index = inc(index), count = count, loop) :
|
540
|
+
value;
|
541
|
+
};
|
542
|
+
return recur;
|
543
|
+
})(a - b - c - d - e - f, 0, more.length);
|
544
|
+
};
|
545
|
+
return void(0);
|
546
|
+
};
|
547
|
+
exports.subtract = subtract;
|
548
|
+
|
549
|
+
var divide = function divide(a, b, c, d, e, f) {
|
550
|
+
switch (arguments.length) {
|
551
|
+
case 0:
|
552
|
+
return (function() { throw TypeError("Wrong number of args passed to: /"); })();
|
553
|
+
case 1:
|
554
|
+
return 1 / a;
|
555
|
+
case 2:
|
556
|
+
return a / b;
|
557
|
+
case 3:
|
558
|
+
return a / b / c;
|
559
|
+
case 4:
|
560
|
+
return a / b / c / d;
|
561
|
+
case 5:
|
562
|
+
return a / b / c / d / e;
|
563
|
+
case 6:
|
564
|
+
return a / b / c / d / e / f;
|
565
|
+
|
566
|
+
default:
|
567
|
+
var more = Array.prototype.slice.call(arguments, 6);
|
568
|
+
return (function loop(value, index, count) {
|
569
|
+
var recur = loop;
|
570
|
+
while (recur === loop) {
|
571
|
+
recur = index < count ?
|
572
|
+
(value = value / ((more || 0)[index]), index = inc(index), count = count, loop) :
|
573
|
+
value;
|
574
|
+
};
|
575
|
+
return recur;
|
576
|
+
})(a / b / c / d / e / f, 0, more.length);
|
577
|
+
};
|
578
|
+
return void(0);
|
579
|
+
};
|
580
|
+
exports.divide = divide;
|
581
|
+
|
582
|
+
var multiply = function multiply(a, b, c, d, e, f) {
|
583
|
+
switch (arguments.length) {
|
584
|
+
case 0:
|
585
|
+
return 1;
|
586
|
+
case 1:
|
587
|
+
return a;
|
588
|
+
case 2:
|
589
|
+
return a * b;
|
590
|
+
case 3:
|
591
|
+
return a * b * c;
|
592
|
+
case 4:
|
593
|
+
return a * b * c * d;
|
594
|
+
case 5:
|
595
|
+
return a * b * c * d * e;
|
596
|
+
case 6:
|
597
|
+
return a * b * c * d * e * f;
|
598
|
+
|
599
|
+
default:
|
600
|
+
var more = Array.prototype.slice.call(arguments, 6);
|
601
|
+
return (function loop(value, index, count) {
|
602
|
+
var recur = loop;
|
603
|
+
while (recur === loop) {
|
604
|
+
recur = index < count ?
|
605
|
+
(value = value * ((more || 0)[index]), index = inc(index), count = count, loop) :
|
606
|
+
value;
|
607
|
+
};
|
608
|
+
return recur;
|
609
|
+
})(a * b * c * d * e * f, 0, more.length);
|
610
|
+
};
|
611
|
+
return void(0);
|
612
|
+
};
|
613
|
+
exports.multiply = multiply;
|
614
|
+
|
615
|
+
var and = function and(a, b, c, d, e, f) {
|
616
|
+
switch (arguments.length) {
|
617
|
+
case 0:
|
618
|
+
return true;
|
619
|
+
case 1:
|
620
|
+
return a;
|
621
|
+
case 2:
|
622
|
+
return a && b;
|
623
|
+
case 3:
|
624
|
+
return a && b && c;
|
625
|
+
case 4:
|
626
|
+
return a && b && c && d;
|
627
|
+
case 5:
|
628
|
+
return a && b && c && d && e;
|
629
|
+
case 6:
|
630
|
+
return a && b && c && d && e && f;
|
631
|
+
|
632
|
+
default:
|
633
|
+
var more = Array.prototype.slice.call(arguments, 6);
|
634
|
+
return (function loop(value, index, count) {
|
635
|
+
var recur = loop;
|
636
|
+
while (recur === loop) {
|
637
|
+
recur = index < count ?
|
638
|
+
(value = value && ((more || 0)[index]), index = inc(index), count = count, loop) :
|
639
|
+
value;
|
640
|
+
};
|
641
|
+
return recur;
|
642
|
+
})(a && b && c && d && e && f, 0, more.length);
|
643
|
+
};
|
644
|
+
return void(0);
|
645
|
+
};
|
646
|
+
exports.and = and;
|
647
|
+
|
648
|
+
var or = function or(a, b, c, d, e, f) {
|
649
|
+
switch (arguments.length) {
|
650
|
+
case 0:
|
651
|
+
return void(0);
|
652
|
+
case 1:
|
653
|
+
return a;
|
654
|
+
case 2:
|
655
|
+
return a || b;
|
656
|
+
case 3:
|
657
|
+
return a || b || c;
|
658
|
+
case 4:
|
659
|
+
return a || b || c || d;
|
660
|
+
case 5:
|
661
|
+
return a || b || c || d || e;
|
662
|
+
case 6:
|
663
|
+
return a || b || c || d || e || f;
|
664
|
+
|
665
|
+
default:
|
666
|
+
var more = Array.prototype.slice.call(arguments, 6);
|
667
|
+
return (function loop(value, index, count) {
|
668
|
+
var recur = loop;
|
669
|
+
while (recur === loop) {
|
670
|
+
recur = index < count ?
|
671
|
+
(value = value || ((more || 0)[index]), index = inc(index), count = count, loop) :
|
672
|
+
value;
|
673
|
+
};
|
674
|
+
return recur;
|
675
|
+
})(a || b || c || d || e || f, 0, more.length);
|
676
|
+
};
|
677
|
+
return void(0);
|
678
|
+
};
|
679
|
+
exports.or = or;
|
680
|
+
|
681
|
+
var print = function print() {
|
682
|
+
var more = Array.prototype.slice.call(arguments, 0);
|
683
|
+
return console.log.apply(console.log, more);
|
684
|
+
};
|
685
|
+
exports.print = print
|
686
|
+
|
687
|
+
})()
|
688
|
+
},{}],"wisp/sequence":[function(require,module,exports){
|
689
|
+
module.exports=require('zNvMnP');
|
690
|
+
},{}],"zNvMnP":[function(require,module,exports){
|
691
|
+
var merge = (require("./runtime")).merge;
|
692
|
+
var inc = (require("./runtime")).inc;
|
693
|
+
var dec = (require("./runtime")).dec;
|
694
|
+
var str = (require("./runtime")).str;
|
695
|
+
var keyValues = (require("./runtime")).keyValues;
|
696
|
+
var isDictionary = (require("./runtime")).isDictionary;
|
697
|
+
var isString = (require("./runtime")).isString;
|
698
|
+
var isNumber = (require("./runtime")).isNumber;
|
699
|
+
var isFn = (require("./runtime")).isFn;
|
700
|
+
var isVector = (require("./runtime")).isVector;
|
701
|
+
var isNil = (require("./runtime")).isNil;;
|
702
|
+
|
703
|
+
var List = function List(head, tail) {
|
704
|
+
this.head = head;
|
705
|
+
this.tail = tail || (list());
|
706
|
+
this.length = inc(count(this.tail));
|
707
|
+
return this;
|
708
|
+
};
|
709
|
+
|
710
|
+
List.prototype.length = 0;
|
711
|
+
|
712
|
+
List.type = "wisp.list";
|
713
|
+
|
714
|
+
List.prototype.type = List.type;
|
715
|
+
|
716
|
+
List.prototype.tail = Object.create(List.prototype);
|
717
|
+
|
718
|
+
List.prototype.toString = function() {
|
719
|
+
return (function loop(result, list) {
|
720
|
+
var recur = loop;
|
721
|
+
while (recur === loop) {
|
722
|
+
recur = isEmpty(list) ?
|
723
|
+
"" + "(" + (result.substr(1)) + ")" :
|
724
|
+
(result = "" + result + " " + (isVector(first(list)) ?
|
725
|
+
"" + "[" + (first(list).join(" ")) + "]" :
|
726
|
+
isNil(first(list)) ?
|
727
|
+
"nil" :
|
728
|
+
isString(first(list)) ?
|
729
|
+
JSON.stringify(first(list)) :
|
730
|
+
isNumber(first(list)) ?
|
731
|
+
JSON.stringify(first(list)) :
|
732
|
+
first(list)), list = rest(list), loop);
|
733
|
+
};
|
734
|
+
return recur;
|
735
|
+
})("", this);
|
736
|
+
};
|
737
|
+
|
738
|
+
var lazySeqValue = function lazySeqValue(lazySeq) {
|
739
|
+
return !(lazySeq.realized) ?
|
740
|
+
(lazySeq.realized = true) && (lazySeq.x = lazySeq.x()) :
|
741
|
+
lazySeq.x;
|
742
|
+
};
|
743
|
+
|
744
|
+
var LazySeq = function LazySeq(realized, x) {
|
745
|
+
this.realized = realized || false;
|
746
|
+
this.x = x;
|
747
|
+
return this;
|
748
|
+
};
|
749
|
+
|
750
|
+
LazySeq.type = "wisp.lazy.seq";
|
751
|
+
|
752
|
+
LazySeq.prototype.type = LazySeq.type;
|
753
|
+
|
754
|
+
var lazySeq = function lazySeq(realized, body) {
|
755
|
+
return new LazySeq(realized, body);
|
756
|
+
};
|
757
|
+
exports.lazySeq = lazySeq;
|
758
|
+
|
759
|
+
var isLazySeq = function isLazySeq(value) {
|
760
|
+
return value && (LazySeq.type === value.type);
|
761
|
+
};
|
762
|
+
exports.isLazySeq = isLazySeq;
|
763
|
+
|
764
|
+
undefined;
|
765
|
+
|
766
|
+
var isList = function isList(value) {
|
767
|
+
return value && (List.type === value.type);
|
768
|
+
};
|
769
|
+
exports.isList = isList;
|
770
|
+
|
771
|
+
var list = function list() {
|
772
|
+
return arguments.length === 0 ?
|
773
|
+
Object.create(List.prototype) :
|
774
|
+
Array.prototype.slice.call(arguments).reduceRight(function(tail, head) {
|
775
|
+
return cons(head, tail);
|
776
|
+
}, list());
|
777
|
+
};
|
778
|
+
exports.list = list;
|
779
|
+
|
780
|
+
var cons = function cons(head, tail) {
|
781
|
+
return new List(head, tail);
|
782
|
+
};
|
783
|
+
exports.cons = cons;
|
784
|
+
|
785
|
+
var reverseList = function reverseList(sequence) {
|
786
|
+
return (function loop(items, source) {
|
787
|
+
var recur = loop;
|
788
|
+
while (recur === loop) {
|
789
|
+
recur = isEmpty(source) ?
|
790
|
+
list.apply(list, items) :
|
791
|
+
(items = [first(source)].concat(items), source = rest(source), loop);
|
792
|
+
};
|
793
|
+
return recur;
|
794
|
+
})([], sequence);
|
795
|
+
};
|
796
|
+
|
797
|
+
var isSequential = function isSequential(x) {
|
798
|
+
return (isList(x)) || (isVector(x)) || (isLazySeq(x)) || (isDictionary(x)) || (isString(x));
|
799
|
+
};
|
800
|
+
exports.isSequential = isSequential;
|
801
|
+
|
802
|
+
var reverse = function reverse(sequence) {
|
803
|
+
return isList(sequence) ?
|
804
|
+
reverseList(sequence) :
|
805
|
+
isVector(sequence) ?
|
806
|
+
sequence.reverse() :
|
807
|
+
isNil(sequence) ?
|
808
|
+
list() :
|
809
|
+
"else" ?
|
810
|
+
reverse(seq(sequence)) :
|
811
|
+
void(0);
|
812
|
+
};
|
813
|
+
exports.reverse = reverse;
|
814
|
+
|
815
|
+
var map = function map(f, sequence) {
|
816
|
+
return isVector(sequence) ?
|
817
|
+
sequence.map(f) :
|
818
|
+
isList(sequence) ?
|
819
|
+
mapList(f, sequence) :
|
820
|
+
isNil(sequence) ?
|
821
|
+
list() :
|
822
|
+
"else" ?
|
823
|
+
map(f, seq(sequence)) :
|
824
|
+
void(0);
|
825
|
+
};
|
826
|
+
exports.map = map;
|
827
|
+
|
828
|
+
var mapList = function mapList(f, sequence) {
|
829
|
+
return (function loop(result, items) {
|
830
|
+
var recur = loop;
|
831
|
+
while (recur === loop) {
|
832
|
+
recur = isEmpty(items) ?
|
833
|
+
reverse(result) :
|
834
|
+
(result = cons(f(first(items)), result), items = rest(items), loop);
|
835
|
+
};
|
836
|
+
return recur;
|
837
|
+
})(list(), sequence);
|
838
|
+
};
|
839
|
+
|
840
|
+
var filter = function filter(isF, sequence) {
|
841
|
+
return isVector(sequence) ?
|
842
|
+
sequence.filter(isF) :
|
843
|
+
isList(sequence) ?
|
844
|
+
filterList(isF, sequence) :
|
845
|
+
isNil(sequence) ?
|
846
|
+
list() :
|
847
|
+
"else" ?
|
848
|
+
filter(isF, seq(sequence)) :
|
849
|
+
void(0);
|
850
|
+
};
|
851
|
+
exports.filter = filter;
|
852
|
+
|
853
|
+
var filterList = function filterList(isF, sequence) {
|
854
|
+
return (function loop(result, items) {
|
855
|
+
var recur = loop;
|
856
|
+
while (recur === loop) {
|
857
|
+
recur = isEmpty(items) ?
|
858
|
+
reverse(result) :
|
859
|
+
(result = isF(first(items)) ?
|
860
|
+
cons(first(items), result) :
|
861
|
+
result, items = rest(items), loop);
|
862
|
+
};
|
863
|
+
return recur;
|
864
|
+
})(list(), sequence);
|
865
|
+
};
|
866
|
+
|
867
|
+
var reduce = function reduce(f) {
|
868
|
+
var params = Array.prototype.slice.call(arguments, 1);
|
869
|
+
return (function() {
|
870
|
+
var hasInitial = count(params) >= 2;
|
871
|
+
var initial = hasInitial ?
|
872
|
+
first(params) :
|
873
|
+
void(0);
|
874
|
+
var sequence = hasInitial ?
|
875
|
+
second(params) :
|
876
|
+
first(params);
|
877
|
+
return isNil(sequence) ?
|
878
|
+
initial :
|
879
|
+
isVector(sequence) ?
|
880
|
+
hasInitial ?
|
881
|
+
sequence.reduce(f, initial) :
|
882
|
+
sequence.reduce(f) :
|
883
|
+
isList(sequence) ?
|
884
|
+
hasInitial ?
|
885
|
+
reduceList(f, initial, sequence) :
|
886
|
+
reduceList(f, first(sequence), rest(sequence)) :
|
887
|
+
"else" ?
|
888
|
+
reduce(f, initial, seq(sequence)) :
|
889
|
+
void(0);
|
890
|
+
})();
|
891
|
+
};
|
892
|
+
exports.reduce = reduce;
|
893
|
+
|
894
|
+
var reduceList = function reduceList(f, initial, sequence) {
|
895
|
+
return (function loop(result, items) {
|
896
|
+
var recur = loop;
|
897
|
+
while (recur === loop) {
|
898
|
+
recur = isEmpty(items) ?
|
899
|
+
result :
|
900
|
+
(result = f(result, first(items)), items = rest(items), loop);
|
901
|
+
};
|
902
|
+
return recur;
|
903
|
+
})(initial, sequence);
|
904
|
+
};
|
905
|
+
|
906
|
+
var count = function count(sequence) {
|
907
|
+
return isNil(sequence) ?
|
908
|
+
0 :
|
909
|
+
(seq(sequence)).length;
|
910
|
+
};
|
911
|
+
exports.count = count;
|
912
|
+
|
913
|
+
var isEmpty = function isEmpty(sequence) {
|
914
|
+
return count(sequence) === 0;
|
915
|
+
};
|
916
|
+
exports.isEmpty = isEmpty;
|
917
|
+
|
918
|
+
var first = function first(sequence) {
|
919
|
+
return isNil(sequence) ?
|
920
|
+
void(0) :
|
921
|
+
isList(sequence) ?
|
922
|
+
sequence.head :
|
923
|
+
(isVector(sequence)) || (isString(sequence)) ?
|
924
|
+
(sequence || 0)[0] :
|
925
|
+
isLazySeq(sequence) ?
|
926
|
+
first(lazySeqValue(sequence)) :
|
927
|
+
"else" ?
|
928
|
+
first(seq(sequence)) :
|
929
|
+
void(0);
|
930
|
+
};
|
931
|
+
exports.first = first;
|
932
|
+
|
933
|
+
var second = function second(sequence) {
|
934
|
+
return isNil(sequence) ?
|
935
|
+
void(0) :
|
936
|
+
isList(sequence) ?
|
937
|
+
first(rest(sequence)) :
|
938
|
+
(isVector(sequence)) || (isString(sequence)) ?
|
939
|
+
(sequence || 0)[1] :
|
940
|
+
isLazySeq(sequence) ?
|
941
|
+
second(lazySeqValue(sequence)) :
|
942
|
+
"else" ?
|
943
|
+
first(rest(seq(sequence))) :
|
944
|
+
void(0);
|
945
|
+
};
|
946
|
+
exports.second = second;
|
947
|
+
|
948
|
+
var third = function third(sequence) {
|
949
|
+
return isNil(sequence) ?
|
950
|
+
void(0) :
|
951
|
+
isList(sequence) ?
|
952
|
+
first(rest(rest(sequence))) :
|
953
|
+
(isVector(sequence)) || (isString(sequence)) ?
|
954
|
+
(sequence || 0)[2] :
|
955
|
+
isLazySeq(sequence) ?
|
956
|
+
third(lazySeqValue(sequence)) :
|
957
|
+
"else" ?
|
958
|
+
second(rest(seq(sequence))) :
|
959
|
+
void(0);
|
960
|
+
};
|
961
|
+
exports.third = third;
|
962
|
+
|
963
|
+
var rest = function rest(sequence) {
|
964
|
+
return isNil(sequence) ?
|
965
|
+
list() :
|
966
|
+
isList(sequence) ?
|
967
|
+
sequence.tail :
|
968
|
+
(isVector(sequence)) || (isString(sequence)) ?
|
969
|
+
sequence.slice(1) :
|
970
|
+
isLazySeq(sequence) ?
|
971
|
+
rest(lazySeqValue(sequence)) :
|
972
|
+
"else" ?
|
973
|
+
rest(seq(sequence)) :
|
974
|
+
void(0);
|
975
|
+
};
|
976
|
+
exports.rest = rest;
|
977
|
+
|
978
|
+
var lastOfList = function lastOfList(list) {
|
979
|
+
return (function loop(item, items) {
|
980
|
+
var recur = loop;
|
981
|
+
while (recur === loop) {
|
982
|
+
recur = isEmpty(items) ?
|
983
|
+
item :
|
984
|
+
(item = first(items), items = rest(items), loop);
|
985
|
+
};
|
986
|
+
return recur;
|
987
|
+
})(first(list), rest(list));
|
988
|
+
};
|
989
|
+
|
990
|
+
var last = function last(sequence) {
|
991
|
+
return (isVector(sequence)) || (isString(sequence)) ?
|
992
|
+
(sequence || 0)[dec(count(sequence))] :
|
993
|
+
isList(sequence) ?
|
994
|
+
lastOfList(sequence) :
|
995
|
+
isNil(sequence) ?
|
996
|
+
void(0) :
|
997
|
+
isLazySeq(sequence) ?
|
998
|
+
last(lazySeqValue(sequence)) :
|
999
|
+
"else" ?
|
1000
|
+
last(seq(sequence)) :
|
1001
|
+
void(0);
|
1002
|
+
};
|
1003
|
+
exports.last = last;
|
1004
|
+
|
1005
|
+
var butlast = function butlast(sequence) {
|
1006
|
+
var items = isNil(sequence) ?
|
1007
|
+
void(0) :
|
1008
|
+
isString(sequence) ?
|
1009
|
+
subs(sequence, 0, dec(count(sequence))) :
|
1010
|
+
isVector(sequence) ?
|
1011
|
+
sequence.slice(0, dec(count(sequence))) :
|
1012
|
+
isList(sequence) ?
|
1013
|
+
list.apply(list, butlast(vec(sequence))) :
|
1014
|
+
isLazySeq(sequence) ?
|
1015
|
+
butlast(lazySeqValue(sequence)) :
|
1016
|
+
"else" ?
|
1017
|
+
butlast(seq(sequence)) :
|
1018
|
+
void(0);
|
1019
|
+
return !((isNil(items)) || (isEmpty(items))) ?
|
1020
|
+
items :
|
1021
|
+
void(0);
|
1022
|
+
};
|
1023
|
+
exports.butlast = butlast;
|
1024
|
+
|
1025
|
+
var take = function take(n, sequence) {
|
1026
|
+
return isNil(sequence) ?
|
1027
|
+
list() :
|
1028
|
+
isVector(sequence) ?
|
1029
|
+
takeFromVector(n, sequence) :
|
1030
|
+
isList(sequence) ?
|
1031
|
+
takeFromList(n, sequence) :
|
1032
|
+
isLazySeq(sequence) ?
|
1033
|
+
take(n, lazySeqValue(sequence)) :
|
1034
|
+
"else" ?
|
1035
|
+
take(n, seq(sequence)) :
|
1036
|
+
void(0);
|
1037
|
+
};
|
1038
|
+
exports.take = take;
|
1039
|
+
|
1040
|
+
var takeVectorWhile = function takeVectorWhile(predicate, vector) {
|
1041
|
+
return (function loop(result, tail, head) {
|
1042
|
+
var recur = loop;
|
1043
|
+
while (recur === loop) {
|
1044
|
+
recur = (!(isEmpty(tail))) && (predicate(head)) ?
|
1045
|
+
(result = conj(result, head), tail = rest(tail), head = first(tail), loop) :
|
1046
|
+
result;
|
1047
|
+
};
|
1048
|
+
return recur;
|
1049
|
+
})([], vector, first(vector));
|
1050
|
+
};
|
1051
|
+
|
1052
|
+
var takeListWhile = function takeListWhile(predicate, items) {
|
1053
|
+
return (function loop(result, tail, head) {
|
1054
|
+
var recur = loop;
|
1055
|
+
while (recur === loop) {
|
1056
|
+
recur = (!(isEmpty(tail))) && (isPredicate(head)) ?
|
1057
|
+
(result = conj(result, head), tail = rest(tail), head = first(tail), loop) :
|
1058
|
+
list.apply(list, result);
|
1059
|
+
};
|
1060
|
+
return recur;
|
1061
|
+
})([], items, first(items));
|
1062
|
+
};
|
1063
|
+
|
1064
|
+
var takeWhile = function takeWhile(predicate, sequence) {
|
1065
|
+
return isNil(sequence) ?
|
1066
|
+
list() :
|
1067
|
+
isVector(sequence) ?
|
1068
|
+
takeVectorWhile(predicate, sequence) :
|
1069
|
+
isList(sequence) ?
|
1070
|
+
takeVectorWhile(predicate, sequence) :
|
1071
|
+
"else" ?
|
1072
|
+
takeWhile(predicate, lazySeqValue(sequence)) :
|
1073
|
+
void(0);
|
1074
|
+
};
|
1075
|
+
exports.takeWhile = takeWhile;
|
1076
|
+
|
1077
|
+
var takeFromVector = function takeFromVector(n, vector) {
|
1078
|
+
return vector.slice(0, n);
|
1079
|
+
};
|
1080
|
+
|
1081
|
+
var takeFromList = function takeFromList(n, sequence) {
|
1082
|
+
return (function loop(taken, items, n) {
|
1083
|
+
var recur = loop;
|
1084
|
+
while (recur === loop) {
|
1085
|
+
recur = (n === 0) || (isEmpty(items)) ?
|
1086
|
+
reverse(taken) :
|
1087
|
+
(taken = cons(first(items), taken), items = rest(items), n = dec(n), loop);
|
1088
|
+
};
|
1089
|
+
return recur;
|
1090
|
+
})(list(), sequence, n);
|
1091
|
+
};
|
1092
|
+
|
1093
|
+
var dropFromList = function dropFromList(n, sequence) {
|
1094
|
+
return (function loop(left, items) {
|
1095
|
+
var recur = loop;
|
1096
|
+
while (recur === loop) {
|
1097
|
+
recur = (left < 1) || (isEmpty(items)) ?
|
1098
|
+
items :
|
1099
|
+
(left = dec(left), items = rest(items), loop);
|
1100
|
+
};
|
1101
|
+
return recur;
|
1102
|
+
})(n, sequence);
|
1103
|
+
};
|
1104
|
+
|
1105
|
+
var drop = function drop(n, sequence) {
|
1106
|
+
return n <= 0 ?
|
1107
|
+
sequence :
|
1108
|
+
isString(sequence) ?
|
1109
|
+
sequence.substr(n) :
|
1110
|
+
isVector(sequence) ?
|
1111
|
+
sequence.slice(n) :
|
1112
|
+
isList(sequence) ?
|
1113
|
+
dropFromList(n, sequence) :
|
1114
|
+
isNil(sequence) ?
|
1115
|
+
list() :
|
1116
|
+
isLazySeq(sequence) ?
|
1117
|
+
drop(n, lazySeqValue(sequence)) :
|
1118
|
+
"else" ?
|
1119
|
+
drop(n, seq(sequence)) :
|
1120
|
+
void(0);
|
1121
|
+
};
|
1122
|
+
exports.drop = drop;
|
1123
|
+
|
1124
|
+
var conjList = function conjList(sequence, items) {
|
1125
|
+
return reduce(function(result, item) {
|
1126
|
+
return cons(item, result);
|
1127
|
+
}, sequence, items);
|
1128
|
+
};
|
1129
|
+
|
1130
|
+
var conj = function conj(sequence) {
|
1131
|
+
var items = Array.prototype.slice.call(arguments, 1);
|
1132
|
+
return isVector(sequence) ?
|
1133
|
+
sequence.concat(items) :
|
1134
|
+
isString(sequence) ?
|
1135
|
+
"" + sequence + (str.apply(str, items)) :
|
1136
|
+
isNil(sequence) ?
|
1137
|
+
list.apply(list, reverse(items)) :
|
1138
|
+
(isList(sequence)) || (isLazySeq()) ?
|
1139
|
+
conjList(sequence, items) :
|
1140
|
+
isDictionary(sequence) ?
|
1141
|
+
merge(sequence, merge.apply(merge, items)) :
|
1142
|
+
"else" ?
|
1143
|
+
(function() { throw TypeError("" + "Type can't be conjoined " + sequence); })() :
|
1144
|
+
void(0);
|
1145
|
+
};
|
1146
|
+
exports.conj = conj;
|
1147
|
+
|
1148
|
+
var concat = function concat() {
|
1149
|
+
var sequences = Array.prototype.slice.call(arguments, 0);
|
1150
|
+
return reverse(reduce(function(result, sequence) {
|
1151
|
+
return reduce(function(result, item) {
|
1152
|
+
return cons(item, result);
|
1153
|
+
}, result, seq(sequence));
|
1154
|
+
}, list(), sequences));
|
1155
|
+
};
|
1156
|
+
exports.concat = concat;
|
1157
|
+
|
1158
|
+
var seq = function seq(sequence) {
|
1159
|
+
return isNil(sequence) ?
|
1160
|
+
void(0) :
|
1161
|
+
(isVector(sequence)) || (isList(sequence)) || (isLazySeq(sequence)) ?
|
1162
|
+
sequence :
|
1163
|
+
isString(sequence) ?
|
1164
|
+
Array.prototype.slice.call(sequence) :
|
1165
|
+
isDictionary(sequence) ?
|
1166
|
+
keyValues(sequence) :
|
1167
|
+
"default" ?
|
1168
|
+
(function() { throw TypeError("" + "Can not seq " + sequence); })() :
|
1169
|
+
void(0);
|
1170
|
+
};
|
1171
|
+
exports.seq = seq;
|
1172
|
+
|
1173
|
+
var isSeq = function isSeq(sequence) {
|
1174
|
+
return (isList(sequence)) || (isLazySeq(sequence));
|
1175
|
+
};
|
1176
|
+
exports.isSeq = isSeq;
|
1177
|
+
|
1178
|
+
var listToVector = function listToVector(source) {
|
1179
|
+
return (function loop(result, list) {
|
1180
|
+
var recur = loop;
|
1181
|
+
while (recur === loop) {
|
1182
|
+
recur = isEmpty(list) ?
|
1183
|
+
result :
|
1184
|
+
(result = (function() {
|
1185
|
+
result.push(first(list));
|
1186
|
+
return result;
|
1187
|
+
})(), list = rest(list), loop);
|
1188
|
+
};
|
1189
|
+
return recur;
|
1190
|
+
})([], source);
|
1191
|
+
};
|
1192
|
+
|
1193
|
+
var vec = function vec(sequence) {
|
1194
|
+
return isNil(sequence) ?
|
1195
|
+
[] :
|
1196
|
+
isVector(sequence) ?
|
1197
|
+
sequence :
|
1198
|
+
isList(sequence) ?
|
1199
|
+
listToVector(sequence) :
|
1200
|
+
"else" ?
|
1201
|
+
vec(seq(sequence)) :
|
1202
|
+
void(0);
|
1203
|
+
};
|
1204
|
+
exports.vec = vec;
|
1205
|
+
|
1206
|
+
var sort = function sort(f, items) {
|
1207
|
+
var hasComparator = isFn(f);
|
1208
|
+
var items = (!(hasComparator)) && (isNil(items)) ?
|
1209
|
+
f :
|
1210
|
+
items;
|
1211
|
+
var compare = hasComparator ?
|
1212
|
+
function(a, b) {
|
1213
|
+
return f(a, b) ?
|
1214
|
+
0 :
|
1215
|
+
1;
|
1216
|
+
} :
|
1217
|
+
void(0);
|
1218
|
+
return isNil(items) ?
|
1219
|
+
list() :
|
1220
|
+
isVector(items) ?
|
1221
|
+
items.sort(compare) :
|
1222
|
+
isList(items) ?
|
1223
|
+
list.apply(list, vec(items).sort(compare)) :
|
1224
|
+
isDictionary(items) ?
|
1225
|
+
seq(items).sort(compare) :
|
1226
|
+
"else" ?
|
1227
|
+
sort(f, seq(items)) :
|
1228
|
+
void(0);
|
1229
|
+
};
|
1230
|
+
exports.sort = sort;
|
1231
|
+
|
1232
|
+
var repeat = function repeat(n, x) {
|
1233
|
+
return (function loop(n, result) {
|
1234
|
+
var recur = loop;
|
1235
|
+
while (recur === loop) {
|
1236
|
+
recur = n <= 0 ?
|
1237
|
+
result :
|
1238
|
+
(n = dec(n), result = conj(result, x), loop);
|
1239
|
+
};
|
1240
|
+
return recur;
|
1241
|
+
})(n, []);
|
1242
|
+
};
|
1243
|
+
exports.repeat = repeat
|
1244
|
+
|
1245
|
+
},{"./runtime":"+Sggh0"}],"wisp/string":[function(require,module,exports){
|
1246
|
+
module.exports=require('BIHQiq');
|
1247
|
+
},{}],"BIHQiq":[function(require,module,exports){
|
1248
|
+
var isString = (require("./runtime")).isString;
|
1249
|
+
var isNil = (require("./runtime")).isNil;
|
1250
|
+
var reMatches = (require("./runtime")).reMatches;
|
1251
|
+
var subs = (require("./runtime")).subs;
|
1252
|
+
var str = (require("./runtime")).str;;
|
1253
|
+
|
1254
|
+
var isEmpty = (require("./sequence")).isEmpty;
|
1255
|
+
var vec = (require("./sequence")).vec;;
|
1256
|
+
|
1257
|
+
var split = function split(string, pattern, limit) {
|
1258
|
+
return string.split(pattern, limit);
|
1259
|
+
};
|
1260
|
+
exports.split = split;
|
1261
|
+
|
1262
|
+
var join = function join(separator, coll) {
|
1263
|
+
switch (arguments.length) {
|
1264
|
+
case 1:
|
1265
|
+
var coll = separator;
|
1266
|
+
return str.apply(str, vec(coll));
|
1267
|
+
case 2:
|
1268
|
+
return vec(coll).join(separator);
|
1269
|
+
|
1270
|
+
default:
|
1271
|
+
(function() { throw Error("Invalid arity"); })()
|
1272
|
+
};
|
1273
|
+
return void(0);
|
1274
|
+
};
|
1275
|
+
exports.join = join;
|
1276
|
+
|
1277
|
+
var upperCase = function upperCase(string) {
|
1278
|
+
return string.toUpperCase();
|
1279
|
+
};
|
1280
|
+
exports.upperCase = upperCase;
|
1281
|
+
|
1282
|
+
var upperCase = function upperCase(string) {
|
1283
|
+
return string.toUpperCase();
|
1284
|
+
};
|
1285
|
+
exports.upperCase = upperCase;
|
1286
|
+
|
1287
|
+
var lowerCase = function lowerCase(string) {
|
1288
|
+
return string.toLowerCase();
|
1289
|
+
};
|
1290
|
+
exports.lowerCase = lowerCase;
|
1291
|
+
|
1292
|
+
var capitalize = function capitalize(string) {
|
1293
|
+
return count(string) < 2 ?
|
1294
|
+
upperCase(string) :
|
1295
|
+
"" + (upperCase(subs(s, 0, 1))) + (lowerCase(subs(s, 1)));
|
1296
|
+
};
|
1297
|
+
exports.capitalize = capitalize;
|
1298
|
+
|
1299
|
+
var replace = function replace(string, match, replacement) {
|
1300
|
+
return string.replace(match, replacement);
|
1301
|
+
};
|
1302
|
+
exports.replace = replace;
|
1303
|
+
|
1304
|
+
var __LEFTSPACES__ = /^\s\s*/;
|
1305
|
+
exports.__LEFTSPACES__ = __LEFTSPACES__;
|
1306
|
+
|
1307
|
+
var __RIGHTSPACES__ = /\s\s*$/;
|
1308
|
+
exports.__RIGHTSPACES__ = __RIGHTSPACES__;
|
1309
|
+
|
1310
|
+
var __SPACES__ = /^\s\s*$/;
|
1311
|
+
exports.__SPACES__ = __SPACES__;
|
1312
|
+
|
1313
|
+
var triml = isNil("".trimLeft) ?
|
1314
|
+
function(string) {
|
1315
|
+
return string.replace(__LEFTSPACES__, "");
|
1316
|
+
} :
|
1317
|
+
function triml(string) {
|
1318
|
+
return string.trimLeft();
|
1319
|
+
};
|
1320
|
+
exports.triml = triml;
|
1321
|
+
|
1322
|
+
var trimr = isNil("".trimRight) ?
|
1323
|
+
function(string) {
|
1324
|
+
return string.replace(__RIGHTSPACES__, "");
|
1325
|
+
} :
|
1326
|
+
function trimr(string) {
|
1327
|
+
return string.trimRight();
|
1328
|
+
};
|
1329
|
+
exports.trimr = trimr;
|
1330
|
+
|
1331
|
+
var trim = isNil("".trim) ?
|
1332
|
+
function(string) {
|
1333
|
+
return string.replace(__LEFTSPACES__).replace(__RIGHTSPACES__);
|
1334
|
+
} :
|
1335
|
+
function trim(string) {
|
1336
|
+
return string.trim();
|
1337
|
+
};
|
1338
|
+
exports.trim = trim;
|
1339
|
+
|
1340
|
+
var isBlank = function isBlank(string) {
|
1341
|
+
return (isNil(string)) || (isEmpty(string)) || (reMatches(__SPACES__, string));
|
1342
|
+
};
|
1343
|
+
exports.isBlank = isBlank
|
1344
|
+
|
1345
|
+
},{"./runtime":"+Sggh0","./sequence":"zNvMnP"}],"wisp/reader":[function(require,module,exports){
|
1346
|
+
module.exports=require('CX0B04');
|
1347
|
+
},{}],"CX0B04":[function(require,module,exports){
|
1348
|
+
var lazySeq = (require("./sequence")).lazySeq;
|
1349
|
+
var sort = (require("./sequence")).sort;
|
1350
|
+
var butlast = (require("./sequence")).butlast;
|
1351
|
+
var last = (require("./sequence")).last;
|
1352
|
+
var concat = (require("./sequence")).concat;
|
1353
|
+
var rest = (require("./sequence")).rest;
|
1354
|
+
var conj = (require("./sequence")).conj;
|
1355
|
+
var cons = (require("./sequence")).cons;
|
1356
|
+
var vec = (require("./sequence")).vec;
|
1357
|
+
var map = (require("./sequence")).map;
|
1358
|
+
var rest = (require("./sequence")).rest;
|
1359
|
+
var third = (require("./sequence")).third;
|
1360
|
+
var second = (require("./sequence")).second;
|
1361
|
+
var first = (require("./sequence")).first;
|
1362
|
+
var isEmpty = (require("./sequence")).isEmpty;
|
1363
|
+
var count = (require("./sequence")).count;
|
1364
|
+
var isList = (require("./sequence")).isList;
|
1365
|
+
var list = (require("./sequence")).list;;
|
1366
|
+
|
1367
|
+
var isStrictEqual = (require("./runtime")).isStrictEqual;
|
1368
|
+
var isEqual = (require("./runtime")).isEqual;
|
1369
|
+
var vals = (require("./runtime")).vals;
|
1370
|
+
var char = (require("./runtime")).char;
|
1371
|
+
var subs = (require("./runtime")).subs;
|
1372
|
+
var str = (require("./runtime")).str;
|
1373
|
+
var reFind = (require("./runtime")).reFind;
|
1374
|
+
var reMatches = (require("./runtime")).reMatches;
|
1375
|
+
var rePattern = (require("./runtime")).rePattern;
|
1376
|
+
var isDictionary = (require("./runtime")).isDictionary;
|
1377
|
+
var isObject = (require("./runtime")).isObject;
|
1378
|
+
var isBoolean = (require("./runtime")).isBoolean;
|
1379
|
+
var isNumber = (require("./runtime")).isNumber;
|
1380
|
+
var isString = (require("./runtime")).isString;
|
1381
|
+
var isVector = (require("./runtime")).isVector;
|
1382
|
+
var dec = (require("./runtime")).dec;
|
1383
|
+
var inc = (require("./runtime")).inc;
|
1384
|
+
var isNil = (require("./runtime")).isNil;
|
1385
|
+
var keys = (require("./runtime")).keys;
|
1386
|
+
var dictionary = (require("./runtime")).dictionary;
|
1387
|
+
var isOdd = (require("./runtime")).isOdd;;
|
1388
|
+
|
1389
|
+
var gensym = (require("./ast")).gensym;
|
1390
|
+
var name = (require("./ast")).name;
|
1391
|
+
var withMeta = (require("./ast")).withMeta;
|
1392
|
+
var meta = (require("./ast")).meta;
|
1393
|
+
var keyword = (require("./ast")).keyword;
|
1394
|
+
var isKeyword = (require("./ast")).isKeyword;
|
1395
|
+
var symbol = (require("./ast")).symbol;
|
1396
|
+
var isSymbol = (require("./ast")).isSymbol;;
|
1397
|
+
|
1398
|
+
var join = (require("./string")).join;
|
1399
|
+
var split = (require("./string")).split;;
|
1400
|
+
|
1401
|
+
var pushBackReader = function pushBackReader(source, uri) {
|
1402
|
+
return {
|
1403
|
+
"lines": split(source, "\n"),
|
1404
|
+
"buffer": "",
|
1405
|
+
"uri": uri,
|
1406
|
+
"column": -1,
|
1407
|
+
"line": 0
|
1408
|
+
};
|
1409
|
+
};
|
1410
|
+
exports.pushBackReader = pushBackReader;
|
1411
|
+
|
1412
|
+
var peekChar = function peekChar(reader) {
|
1413
|
+
var line = ((reader || 0)["lines"])[(reader || 0)["line"]];
|
1414
|
+
var column = inc((reader || 0)["column"]);
|
1415
|
+
return isNil(line) ?
|
1416
|
+
void(0) :
|
1417
|
+
(line[column]) || "\n";
|
1418
|
+
};
|
1419
|
+
exports.peekChar = peekChar;
|
1420
|
+
|
1421
|
+
var readChar = function readChar(reader) {
|
1422
|
+
var ch = peekChar(reader);
|
1423
|
+
isNewline(peekChar(reader)) ?
|
1424
|
+
(function() {
|
1425
|
+
(reader || 0)["line"] = inc((reader || 0)["line"]);
|
1426
|
+
return (reader || 0)["column"] = -1;
|
1427
|
+
})() :
|
1428
|
+
(reader || 0)["column"] = inc((reader || 0)["column"]);
|
1429
|
+
return ch;
|
1430
|
+
};
|
1431
|
+
exports.readChar = readChar;
|
1432
|
+
|
1433
|
+
var isNewline = function isNewline(ch) {
|
1434
|
+
return "\n" === ch;
|
1435
|
+
};
|
1436
|
+
exports.isNewline = isNewline;
|
1437
|
+
|
1438
|
+
var isBreakingWhitespace = function isBreakingWhitespace(ch) {
|
1439
|
+
return (ch === " ") || (ch === "\t") || (ch === "\n") || (ch === "\r");
|
1440
|
+
};
|
1441
|
+
exports.isBreakingWhitespace = isBreakingWhitespace;
|
1442
|
+
|
1443
|
+
var isWhitespace = function isWhitespace(ch) {
|
1444
|
+
return (isBreakingWhitespace(ch)) || ("," === ch);
|
1445
|
+
};
|
1446
|
+
exports.isWhitespace = isWhitespace;
|
1447
|
+
|
1448
|
+
var isNumeric = function isNumeric(ch) {
|
1449
|
+
return (ch === "0") || (ch === "1") || (ch === "2") || (ch === "3") || (ch === "4") || (ch === "5") || (ch === "6") || (ch === "7") || (ch === "8") || (ch === "9");
|
1450
|
+
};
|
1451
|
+
exports.isNumeric = isNumeric;
|
1452
|
+
|
1453
|
+
var isCommentPrefix = function isCommentPrefix(ch) {
|
1454
|
+
return ";" === ch;
|
1455
|
+
};
|
1456
|
+
exports.isCommentPrefix = isCommentPrefix;
|
1457
|
+
|
1458
|
+
var isNumberLiteral = function isNumberLiteral(reader, initch) {
|
1459
|
+
return (isNumeric(initch)) || ((("+" === initch) || ("-" === initch)) && (isNumeric(peekChar(reader))));
|
1460
|
+
};
|
1461
|
+
exports.isNumberLiteral = isNumberLiteral;
|
1462
|
+
|
1463
|
+
var readerError = function readerError(reader, message) {
|
1464
|
+
var text = "" + message + "\n" + "line:" + ((reader || 0)["line"]) + "\n" + "column:" + ((reader || 0)["column"]);
|
1465
|
+
var error = SyntaxError(text, (reader || 0)["uri"]);
|
1466
|
+
error.line = (reader || 0)["line"];
|
1467
|
+
error.column = (reader || 0)["column"];
|
1468
|
+
error.uri = (reader || 0)["uri"];
|
1469
|
+
return (function() { throw error; })();
|
1470
|
+
};
|
1471
|
+
exports.readerError = readerError;
|
1472
|
+
|
1473
|
+
var isMacroTerminating = function isMacroTerminating(ch) {
|
1474
|
+
return (!(ch === "#")) && (!(ch === "'")) && (!(ch === ":")) && (macros(ch));
|
1475
|
+
};
|
1476
|
+
exports.isMacroTerminating = isMacroTerminating;
|
1477
|
+
|
1478
|
+
var readToken = function readToken(reader, initch) {
|
1479
|
+
return (function loop(buffer, ch) {
|
1480
|
+
var recur = loop;
|
1481
|
+
while (recur === loop) {
|
1482
|
+
recur = (isNil(ch)) || (isWhitespace(ch)) || (isMacroTerminating(ch)) ?
|
1483
|
+
buffer :
|
1484
|
+
(buffer = "" + buffer + (readChar(reader)), ch = peekChar(reader), loop);
|
1485
|
+
};
|
1486
|
+
return recur;
|
1487
|
+
})(initch, peekChar(reader));
|
1488
|
+
};
|
1489
|
+
exports.readToken = readToken;
|
1490
|
+
|
1491
|
+
var skipLine = function skipLine(reader, _) {
|
1492
|
+
return (function loop() {
|
1493
|
+
var recur = loop;
|
1494
|
+
while (recur === loop) {
|
1495
|
+
recur = (function() {
|
1496
|
+
var ch = readChar(reader);
|
1497
|
+
return (ch === "\n") || (ch === "\r") || (isNil(ch)) ?
|
1498
|
+
reader :
|
1499
|
+
(loop);
|
1500
|
+
})();
|
1501
|
+
};
|
1502
|
+
return recur;
|
1503
|
+
})();
|
1504
|
+
};
|
1505
|
+
exports.skipLine = skipLine;
|
1506
|
+
|
1507
|
+
var intPattern = rePattern("^([-+]?)(?:(0)|([1-9][0-9]*)|0[xX]([0-9A-Fa-f]+)|0([0-7]+)|([1-9][0-9]?)[rR]([0-9A-Za-z]+)|0[0-9]+)(N)?$");
|
1508
|
+
exports.intPattern = intPattern;
|
1509
|
+
|
1510
|
+
var ratioPattern = rePattern("([-+]?[0-9]+)/([0-9]+)");
|
1511
|
+
exports.ratioPattern = ratioPattern;
|
1512
|
+
|
1513
|
+
var floatPattern = rePattern("([-+]?[0-9]+(\\.[0-9]*)?([eE][-+]?[0-9]+)?)(M)?");
|
1514
|
+
exports.floatPattern = floatPattern;
|
1515
|
+
|
1516
|
+
var matchInt = function matchInt(s) {
|
1517
|
+
var groups = reFind(intPattern, s);
|
1518
|
+
var group3 = groups[2];
|
1519
|
+
return !((isNil(group3)) || (count(group3) < 1)) ?
|
1520
|
+
0 :
|
1521
|
+
(function() {
|
1522
|
+
var negate = "-" === groups[1] ?
|
1523
|
+
-1 :
|
1524
|
+
1;
|
1525
|
+
var a = groups[3] ?
|
1526
|
+
[groups[3], 10] :
|
1527
|
+
groups[4] ?
|
1528
|
+
[groups[4], 16] :
|
1529
|
+
groups[5] ?
|
1530
|
+
[groups[5], 8] :
|
1531
|
+
groups[7] ?
|
1532
|
+
[groups[7], parseInt(groups[7])] :
|
1533
|
+
"else" ?
|
1534
|
+
[void(0), void(0)] :
|
1535
|
+
void(0);
|
1536
|
+
var n = a[0];
|
1537
|
+
var radix = a[1];
|
1538
|
+
return isNil(n) ?
|
1539
|
+
void(0) :
|
1540
|
+
negate * (parseInt(n, radix));
|
1541
|
+
})();
|
1542
|
+
};
|
1543
|
+
exports.matchInt = matchInt;
|
1544
|
+
|
1545
|
+
var matchRatio = function matchRatio(s) {
|
1546
|
+
var groups = reFind(ratioPattern, s);
|
1547
|
+
var numinator = groups[1];
|
1548
|
+
var denominator = groups[2];
|
1549
|
+
return (parseInt(numinator)) / (parseInt(denominator));
|
1550
|
+
};
|
1551
|
+
exports.matchRatio = matchRatio;
|
1552
|
+
|
1553
|
+
var matchFloat = function matchFloat(s) {
|
1554
|
+
return parseFloat(s);
|
1555
|
+
};
|
1556
|
+
exports.matchFloat = matchFloat;
|
1557
|
+
|
1558
|
+
var matchNumber = function matchNumber(s) {
|
1559
|
+
return reMatches(intPattern, s) ?
|
1560
|
+
matchInt(s) :
|
1561
|
+
reMatches(ratioPattern, s) ?
|
1562
|
+
matchRatio(s) :
|
1563
|
+
reMatches(floatPattern, s) ?
|
1564
|
+
matchFloat(s) :
|
1565
|
+
void(0);
|
1566
|
+
};
|
1567
|
+
exports.matchNumber = matchNumber;
|
1568
|
+
|
1569
|
+
var escapeCharMap = function escapeCharMap(c) {
|
1570
|
+
return c === "t" ?
|
1571
|
+
"\t" :
|
1572
|
+
c === "r" ?
|
1573
|
+
"\r" :
|
1574
|
+
c === "n" ?
|
1575
|
+
"\n" :
|
1576
|
+
c === "\\" ?
|
1577
|
+
"\\" :
|
1578
|
+
c === "\"" ?
|
1579
|
+
"\"" :
|
1580
|
+
c === "b" ?
|
1581
|
+
"" :
|
1582
|
+
c === "f" ?
|
1583
|
+
"" :
|
1584
|
+
"else" ?
|
1585
|
+
void(0) :
|
1586
|
+
void(0);
|
1587
|
+
};
|
1588
|
+
exports.escapeCharMap = escapeCharMap;
|
1589
|
+
|
1590
|
+
var read2Chars = function read2Chars(reader) {
|
1591
|
+
return "" + (readChar(reader)) + (readChar(reader));
|
1592
|
+
};
|
1593
|
+
exports.read2Chars = read2Chars;
|
1594
|
+
|
1595
|
+
var read4Chars = function read4Chars(reader) {
|
1596
|
+
return "" + (readChar(reader)) + (readChar(reader)) + (readChar(reader)) + (readChar(reader));
|
1597
|
+
};
|
1598
|
+
exports.read4Chars = read4Chars;
|
1599
|
+
|
1600
|
+
var unicode2Pattern = rePattern("[0-9A-Fa-f]{2}");
|
1601
|
+
exports.unicode2Pattern = unicode2Pattern;
|
1602
|
+
|
1603
|
+
var unicode4Pattern = rePattern("[0-9A-Fa-f]{4}");
|
1604
|
+
exports.unicode4Pattern = unicode4Pattern;
|
1605
|
+
|
1606
|
+
var validateUnicodeEscape = function validateUnicodeEscape(unicodePattern, reader, escapeChar, unicodeStr) {
|
1607
|
+
return reMatches(unicodePattern, unicodeStr) ?
|
1608
|
+
unicodeStr :
|
1609
|
+
readerError(reader, "" + "Unexpected unicode escape " + "\\" + escapeChar + unicodeStr);
|
1610
|
+
};
|
1611
|
+
exports.validateUnicodeEscape = validateUnicodeEscape;
|
1612
|
+
|
1613
|
+
var makeUnicodeChar = function makeUnicodeChar(codeStr, base) {
|
1614
|
+
var base = base || 16;
|
1615
|
+
var code = parseInt(codeStr, base);
|
1616
|
+
return char(code);
|
1617
|
+
};
|
1618
|
+
exports.makeUnicodeChar = makeUnicodeChar;
|
1619
|
+
|
1620
|
+
var escapeChar = function escapeChar(buffer, reader) {
|
1621
|
+
var ch = readChar(reader);
|
1622
|
+
var mapresult = escapeCharMap(ch);
|
1623
|
+
return mapresult ?
|
1624
|
+
mapresult :
|
1625
|
+
ch === "x" ?
|
1626
|
+
makeUnicodeChar(validateUnicodeEscape(unicode2Pattern, reader, ch, read2Chars(reader))) :
|
1627
|
+
ch === "u" ?
|
1628
|
+
makeUnicodeChar(validateUnicodeEscape(unicode4Pattern, reader, ch, read4Chars(reader))) :
|
1629
|
+
isNumeric(ch) ?
|
1630
|
+
char(ch) :
|
1631
|
+
"else" ?
|
1632
|
+
readerError(reader, "" + "Unexpected unicode escape " + "\\" + ch) :
|
1633
|
+
void(0);
|
1634
|
+
};
|
1635
|
+
exports.escapeChar = escapeChar;
|
1636
|
+
|
1637
|
+
var readPast = function readPast(predicate, reader) {
|
1638
|
+
return (function loop(_) {
|
1639
|
+
var recur = loop;
|
1640
|
+
while (recur === loop) {
|
1641
|
+
recur = predicate(peekChar(reader)) ?
|
1642
|
+
(_ = readChar(reader), loop) :
|
1643
|
+
peekChar(reader);
|
1644
|
+
};
|
1645
|
+
return recur;
|
1646
|
+
})(void(0));
|
1647
|
+
};
|
1648
|
+
exports.readPast = readPast;
|
1649
|
+
|
1650
|
+
var readDelimitedList = function readDelimitedList(delim, reader, isRecursive) {
|
1651
|
+
return (function loop(form) {
|
1652
|
+
var recur = loop;
|
1653
|
+
while (recur === loop) {
|
1654
|
+
recur = (function() {
|
1655
|
+
var ch = readPast(isWhitespace, reader);
|
1656
|
+
!(ch) ?
|
1657
|
+
readerError(reader, "EOF") :
|
1658
|
+
void(0);
|
1659
|
+
return delim === ch ?
|
1660
|
+
(function() {
|
1661
|
+
readChar(reader);
|
1662
|
+
return form;
|
1663
|
+
})() :
|
1664
|
+
(function() {
|
1665
|
+
var macro = macros(ch);
|
1666
|
+
return macro ?
|
1667
|
+
(function() {
|
1668
|
+
var result = macro(reader, readChar(reader));
|
1669
|
+
return (form = result === reader ?
|
1670
|
+
form :
|
1671
|
+
conj(form, result), loop);
|
1672
|
+
})() :
|
1673
|
+
(function() {
|
1674
|
+
var o = read(reader, true, void(0), isRecursive);
|
1675
|
+
return (form = o === reader ?
|
1676
|
+
form :
|
1677
|
+
conj(form, o), loop);
|
1678
|
+
})();
|
1679
|
+
})();
|
1680
|
+
})();
|
1681
|
+
};
|
1682
|
+
return recur;
|
1683
|
+
})([]);
|
1684
|
+
};
|
1685
|
+
exports.readDelimitedList = readDelimitedList;
|
1686
|
+
|
1687
|
+
var notImplemented = function notImplemented(reader, ch) {
|
1688
|
+
return readerError(reader, "" + "Reader for " + ch + " not implemented yet");
|
1689
|
+
};
|
1690
|
+
exports.notImplemented = notImplemented;
|
1691
|
+
|
1692
|
+
var readDispatch = function readDispatch(reader, _) {
|
1693
|
+
var ch = readChar(reader);
|
1694
|
+
var dm = dispatchMacros(ch);
|
1695
|
+
return dm ?
|
1696
|
+
dm(reader, _) :
|
1697
|
+
(function() {
|
1698
|
+
var object = maybeReadTaggedType(reader, ch);
|
1699
|
+
return object ?
|
1700
|
+
object :
|
1701
|
+
readerError(reader, "No dispatch macro for ", ch);
|
1702
|
+
})();
|
1703
|
+
};
|
1704
|
+
exports.readDispatch = readDispatch;
|
1705
|
+
|
1706
|
+
var readUnmatchedDelimiter = function readUnmatchedDelimiter(rdr, ch) {
|
1707
|
+
return readerError(rdr, "Unmached delimiter ", ch);
|
1708
|
+
};
|
1709
|
+
exports.readUnmatchedDelimiter = readUnmatchedDelimiter;
|
1710
|
+
|
1711
|
+
var readList = function readList(reader, _) {
|
1712
|
+
var form = readDelimitedList(")", reader, true);
|
1713
|
+
return withMeta(list.apply(list, form), meta(form));
|
1714
|
+
};
|
1715
|
+
exports.readList = readList;
|
1716
|
+
|
1717
|
+
var readComment = function readComment(reader, _) {
|
1718
|
+
return (function loop(buffer, ch) {
|
1719
|
+
var recur = loop;
|
1720
|
+
while (recur === loop) {
|
1721
|
+
recur = (isNil(ch)) || ("\n" === ch) ?
|
1722
|
+
reader || (list(symbol(void(0), "comment"), buffer)) :
|
1723
|
+
("\\" === ch) ?
|
1724
|
+
(buffer = "" + buffer + (escapeChar(buffer, reader)), ch = readChar(reader), loop) :
|
1725
|
+
"else" ?
|
1726
|
+
(buffer = "" + buffer + ch, ch = readChar(reader), loop) :
|
1727
|
+
void(0);
|
1728
|
+
};
|
1729
|
+
return recur;
|
1730
|
+
})("", readChar(reader));
|
1731
|
+
};
|
1732
|
+
exports.readComment = readComment;
|
1733
|
+
|
1734
|
+
var readVector = function readVector(reader) {
|
1735
|
+
return readDelimitedList("]", reader, true);
|
1736
|
+
};
|
1737
|
+
exports.readVector = readVector;
|
1738
|
+
|
1739
|
+
var readMap = function readMap(reader) {
|
1740
|
+
var form = readDelimitedList("}", reader, true);
|
1741
|
+
return isOdd(count(form)) ?
|
1742
|
+
readerError(reader, "Map literal must contain an even number of forms") :
|
1743
|
+
withMeta(dictionary.apply(dictionary, form), meta(form));
|
1744
|
+
};
|
1745
|
+
exports.readMap = readMap;
|
1746
|
+
|
1747
|
+
var readSet = function readSet(reader, _) {
|
1748
|
+
var form = readDelimitedList("}", reader, true);
|
1749
|
+
return withMeta(concat([symbol(void(0), "set")], form), meta(form));
|
1750
|
+
};
|
1751
|
+
exports.readSet = readSet;
|
1752
|
+
|
1753
|
+
var readNumber = function readNumber(reader, initch) {
|
1754
|
+
return (function loop(buffer, ch) {
|
1755
|
+
var recur = loop;
|
1756
|
+
while (recur === loop) {
|
1757
|
+
recur = (isNil(ch)) || (isWhitespace(ch)) || (macros(ch)) ?
|
1758
|
+
(function() {
|
1759
|
+
var match = matchNumber(buffer);
|
1760
|
+
return isNil(match) ?
|
1761
|
+
readerError(reader, "Invalid number format [", buffer, "]") :
|
1762
|
+
match;
|
1763
|
+
})() :
|
1764
|
+
(buffer = "" + buffer + (readChar(reader)), ch = peekChar(reader), loop);
|
1765
|
+
};
|
1766
|
+
return recur;
|
1767
|
+
})(initch, peekChar(reader));
|
1768
|
+
};
|
1769
|
+
exports.readNumber = readNumber;
|
1770
|
+
|
1771
|
+
var readString = function readString(reader) {
|
1772
|
+
return (function loop(buffer, ch) {
|
1773
|
+
var recur = loop;
|
1774
|
+
while (recur === loop) {
|
1775
|
+
recur = isNil(ch) ?
|
1776
|
+
readerError(reader, "EOF while reading string") :
|
1777
|
+
"\\" === ch ?
|
1778
|
+
(buffer = "" + buffer + (escapeChar(buffer, reader)), ch = readChar(reader), loop) :
|
1779
|
+
"\"" === ch ?
|
1780
|
+
buffer :
|
1781
|
+
"default" ?
|
1782
|
+
(buffer = "" + buffer + ch, ch = readChar(reader), loop) :
|
1783
|
+
void(0);
|
1784
|
+
};
|
1785
|
+
return recur;
|
1786
|
+
})("", readChar(reader));
|
1787
|
+
};
|
1788
|
+
exports.readString = readString;
|
1789
|
+
|
1790
|
+
var readUnquote = function readUnquote(reader) {
|
1791
|
+
var ch = peekChar(reader);
|
1792
|
+
return !(ch) ?
|
1793
|
+
readerError(reader, "EOF while reading character") :
|
1794
|
+
ch === "@" ?
|
1795
|
+
(function() {
|
1796
|
+
readChar(reader);
|
1797
|
+
return list(symbol(void(0), "unquote-splicing"), read(reader, true, void(0), true));
|
1798
|
+
})() :
|
1799
|
+
list(symbol(void(0), "unquote"), read(reader, true, void(0), true));
|
1800
|
+
};
|
1801
|
+
exports.readUnquote = readUnquote;
|
1802
|
+
|
1803
|
+
var specialSymbols = function specialSymbols(text, notFound) {
|
1804
|
+
return text === "nil" ?
|
1805
|
+
void(0) :
|
1806
|
+
text === "true" ?
|
1807
|
+
true :
|
1808
|
+
text === "false" ?
|
1809
|
+
false :
|
1810
|
+
"else" ?
|
1811
|
+
notFound :
|
1812
|
+
void(0);
|
1813
|
+
};
|
1814
|
+
exports.specialSymbols = specialSymbols;
|
1815
|
+
|
1816
|
+
var readSymbol = function readSymbol(reader, initch) {
|
1817
|
+
var token = readToken(reader, initch);
|
1818
|
+
var parts = split(token, "/");
|
1819
|
+
var hasNs = (count(parts) > 1) && (count(token) > 1);
|
1820
|
+
var ns = first(parts);
|
1821
|
+
var name = join("/", rest(parts));
|
1822
|
+
return hasNs ?
|
1823
|
+
symbol(ns, name) :
|
1824
|
+
specialSymbols(token, symbol(token));
|
1825
|
+
};
|
1826
|
+
exports.readSymbol = readSymbol;
|
1827
|
+
|
1828
|
+
var readKeyword = function readKeyword(reader, initch) {
|
1829
|
+
var token = readToken(reader, readChar(reader));
|
1830
|
+
var parts = split(token, "/");
|
1831
|
+
var name = last(parts);
|
1832
|
+
var ns = count(parts) > 1 ?
|
1833
|
+
join("/", butlast(parts)) :
|
1834
|
+
void(0);
|
1835
|
+
var issue = last(ns) === ":" ?
|
1836
|
+
"namespace can't ends with \":\"" :
|
1837
|
+
last(name) === ":" ?
|
1838
|
+
"name can't end with \":\"" :
|
1839
|
+
last(name) === "/" ?
|
1840
|
+
"name can't end with \"/\"" :
|
1841
|
+
count(split(token, "::")) > 1 ?
|
1842
|
+
"name can't contain \"::\"" :
|
1843
|
+
void(0);
|
1844
|
+
return issue ?
|
1845
|
+
readerError(reader, "Invalid token (", issue, "): ", token) :
|
1846
|
+
(!(ns)) && (first(name) === ":") ?
|
1847
|
+
keyword(rest(name)) :
|
1848
|
+
keyword(ns, name);
|
1849
|
+
};
|
1850
|
+
exports.readKeyword = readKeyword;
|
1851
|
+
|
1852
|
+
var desugarMeta = function desugarMeta(f) {
|
1853
|
+
return isKeyword(f) ?
|
1854
|
+
dictionary(name(f), true) :
|
1855
|
+
isSymbol(f) ?
|
1856
|
+
{
|
1857
|
+
"tag": f
|
1858
|
+
} :
|
1859
|
+
isString(f) ?
|
1860
|
+
{
|
1861
|
+
"tag": f
|
1862
|
+
} :
|
1863
|
+
"else" ?
|
1864
|
+
f :
|
1865
|
+
void(0);
|
1866
|
+
};
|
1867
|
+
exports.desugarMeta = desugarMeta;
|
1868
|
+
|
1869
|
+
var wrappingReader = function wrappingReader(prefix) {
|
1870
|
+
return function(reader) {
|
1871
|
+
return list(prefix, read(reader, true, void(0), true));
|
1872
|
+
};
|
1873
|
+
};
|
1874
|
+
exports.wrappingReader = wrappingReader;
|
1875
|
+
|
1876
|
+
var throwingReader = function throwingReader(msg) {
|
1877
|
+
return function(reader) {
|
1878
|
+
return readerError(reader, msg);
|
1879
|
+
};
|
1880
|
+
};
|
1881
|
+
exports.throwingReader = throwingReader;
|
1882
|
+
|
1883
|
+
var readMeta = function readMeta(reader, _) {
|
1884
|
+
var metadata = desugarMeta(read(reader, true, void(0), true));
|
1885
|
+
!(isDictionary(metadata)) ?
|
1886
|
+
readerError(reader, "Metadata must be Symbol, Keyword, String or Map") :
|
1887
|
+
void(0);
|
1888
|
+
return (function() {
|
1889
|
+
var form = read(reader, true, void(0), true);
|
1890
|
+
return isObject(form) ?
|
1891
|
+
withMeta(form, conj(metadata, meta(form))) :
|
1892
|
+
form;
|
1893
|
+
})();
|
1894
|
+
};
|
1895
|
+
exports.readMeta = readMeta;
|
1896
|
+
|
1897
|
+
var readRegex = function readRegex(reader) {
|
1898
|
+
return (function loop(buffer, ch) {
|
1899
|
+
var recur = loop;
|
1900
|
+
while (recur === loop) {
|
1901
|
+
recur = isNil(ch) ?
|
1902
|
+
readerError(reader, "EOF while reading string") :
|
1903
|
+
"\\" === ch ?
|
1904
|
+
(buffer = "" + buffer + ch + (readChar(reader)), ch = readChar(reader), loop) :
|
1905
|
+
"\"" === ch ?
|
1906
|
+
rePattern(buffer) :
|
1907
|
+
"default" ?
|
1908
|
+
(buffer = "" + buffer + ch, ch = readChar(reader), loop) :
|
1909
|
+
void(0);
|
1910
|
+
};
|
1911
|
+
return recur;
|
1912
|
+
})("", readChar(reader));
|
1913
|
+
};
|
1914
|
+
exports.readRegex = readRegex;
|
1915
|
+
|
1916
|
+
var readParam = function readParam(reader, initch) {
|
1917
|
+
var form = readSymbol(reader, initch);
|
1918
|
+
return isEqual(form, symbol("%")) ?
|
1919
|
+
symbol("%1") :
|
1920
|
+
form;
|
1921
|
+
};
|
1922
|
+
exports.readParam = readParam;
|
1923
|
+
|
1924
|
+
var isParam = function isParam(form) {
|
1925
|
+
return (isSymbol(form)) && ("%" === first(name(form)));
|
1926
|
+
};
|
1927
|
+
exports.isParam = isParam;
|
1928
|
+
|
1929
|
+
var lambdaParamsHash = function lambdaParamsHash(form) {
|
1930
|
+
return isParam(form) ?
|
1931
|
+
dictionary(form, form) :
|
1932
|
+
(isDictionary(form)) || (isVector(form)) || (isList(form)) ?
|
1933
|
+
conj.apply(conj, map(lambdaParamsHash, vec(form))) :
|
1934
|
+
"else" ?
|
1935
|
+
{} :
|
1936
|
+
void(0);
|
1937
|
+
};
|
1938
|
+
exports.lambdaParamsHash = lambdaParamsHash;
|
1939
|
+
|
1940
|
+
var lambdaParams = function lambdaParams(body) {
|
1941
|
+
var names = sort(vals(lambdaParamsHash(body)));
|
1942
|
+
var variadic = isEqual(first(names), symbol("%&"));
|
1943
|
+
var n = variadic && (count(names) === 1) ?
|
1944
|
+
0 :
|
1945
|
+
parseInt(rest(name(last(names))));
|
1946
|
+
var params = (function loop(names, i) {
|
1947
|
+
var recur = loop;
|
1948
|
+
while (recur === loop) {
|
1949
|
+
recur = i <= n ?
|
1950
|
+
(names = conj(names, symbol("" + "%" + i)), i = inc(i), loop) :
|
1951
|
+
names;
|
1952
|
+
};
|
1953
|
+
return recur;
|
1954
|
+
})([], 1);
|
1955
|
+
return variadic ?
|
1956
|
+
conj(params, symbol(void(0), "&"), symbol(void(0), "%&")) :
|
1957
|
+
names;
|
1958
|
+
};
|
1959
|
+
exports.lambdaParams = lambdaParams;
|
1960
|
+
|
1961
|
+
var readLambda = function readLambda(reader) {
|
1962
|
+
var body = readList(reader);
|
1963
|
+
return list(symbol(void(0), "fn"), lambdaParams(body), body);
|
1964
|
+
};
|
1965
|
+
exports.readLambda = readLambda;
|
1966
|
+
|
1967
|
+
var readDiscard = function readDiscard(reader, _) {
|
1968
|
+
read(reader, true, void(0), true);
|
1969
|
+
return reader;
|
1970
|
+
};
|
1971
|
+
exports.readDiscard = readDiscard;
|
1972
|
+
|
1973
|
+
var macros = function macros(c) {
|
1974
|
+
return c === "\"" ?
|
1975
|
+
readString :
|
1976
|
+
c === ":" ?
|
1977
|
+
readKeyword :
|
1978
|
+
c === ";" ?
|
1979
|
+
readComment :
|
1980
|
+
c === "'" ?
|
1981
|
+
wrappingReader(symbol(void(0), "quote")) :
|
1982
|
+
c === "@" ?
|
1983
|
+
wrappingReader(symbol(void(0), "deref")) :
|
1984
|
+
c === "^" ?
|
1985
|
+
readMeta :
|
1986
|
+
c === "`" ?
|
1987
|
+
wrappingReader(symbol(void(0), "syntax-quote")) :
|
1988
|
+
c === "~" ?
|
1989
|
+
readUnquote :
|
1990
|
+
c === "(" ?
|
1991
|
+
readList :
|
1992
|
+
c === ")" ?
|
1993
|
+
readUnmatchedDelimiter :
|
1994
|
+
c === "[" ?
|
1995
|
+
readVector :
|
1996
|
+
c === "]" ?
|
1997
|
+
readUnmatchedDelimiter :
|
1998
|
+
c === "{" ?
|
1999
|
+
readMap :
|
2000
|
+
c === "}" ?
|
2001
|
+
readUnmatchedDelimiter :
|
2002
|
+
c === "\\" ?
|
2003
|
+
readChar :
|
2004
|
+
c === "%" ?
|
2005
|
+
readParam :
|
2006
|
+
c === "#" ?
|
2007
|
+
readDispatch :
|
2008
|
+
"else" ?
|
2009
|
+
void(0) :
|
2010
|
+
void(0);
|
2011
|
+
};
|
2012
|
+
exports.macros = macros;
|
2013
|
+
|
2014
|
+
var dispatchMacros = function dispatchMacros(s) {
|
2015
|
+
return s === "{" ?
|
2016
|
+
readSet :
|
2017
|
+
s === "(" ?
|
2018
|
+
readLambda :
|
2019
|
+
s === "<" ?
|
2020
|
+
throwingReader("Unreadable form") :
|
2021
|
+
s === "\"" ?
|
2022
|
+
readRegex :
|
2023
|
+
s === "!" ?
|
2024
|
+
readComment :
|
2025
|
+
s === "_" ?
|
2026
|
+
readDiscard :
|
2027
|
+
"else" ?
|
2028
|
+
void(0) :
|
2029
|
+
void(0);
|
2030
|
+
};
|
2031
|
+
exports.dispatchMacros = dispatchMacros;
|
2032
|
+
|
2033
|
+
var readForm = function readForm(reader, ch) {
|
2034
|
+
var start = {
|
2035
|
+
"line": (reader || 0)["line"],
|
2036
|
+
"column": (reader || 0)["column"]
|
2037
|
+
};
|
2038
|
+
var readMacro = macros(ch);
|
2039
|
+
var form = readMacro ?
|
2040
|
+
readMacro(reader, ch) :
|
2041
|
+
isNumberLiteral(reader, ch) ?
|
2042
|
+
readNumber(reader, ch) :
|
2043
|
+
"else" ?
|
2044
|
+
readSymbol(reader, ch) :
|
2045
|
+
void(0);
|
2046
|
+
return form === reader ?
|
2047
|
+
form :
|
2048
|
+
!((isString(form)) || (isNumber(form)) || (isBoolean(form)) || (isNil(form)) || (isKeyword(form))) ?
|
2049
|
+
withMeta(form, conj({
|
2050
|
+
"start": start,
|
2051
|
+
"end": {
|
2052
|
+
"line": (reader || 0)["line"],
|
2053
|
+
"column": (reader || 0)["column"]
|
2054
|
+
}
|
2055
|
+
}, meta(form))) :
|
2056
|
+
"else" ?
|
2057
|
+
form :
|
2058
|
+
void(0);
|
2059
|
+
};
|
2060
|
+
exports.readForm = readForm;
|
2061
|
+
|
2062
|
+
var read = function read(reader, eofIsError, sentinel, isRecursive) {
|
2063
|
+
return (function loop() {
|
2064
|
+
var recur = loop;
|
2065
|
+
while (recur === loop) {
|
2066
|
+
recur = (function() {
|
2067
|
+
var ch = readChar(reader);
|
2068
|
+
var form = isNil(ch) ?
|
2069
|
+
eofIsError ?
|
2070
|
+
readerError(reader, "EOF") :
|
2071
|
+
sentinel :
|
2072
|
+
isWhitespace(ch) ?
|
2073
|
+
reader :
|
2074
|
+
isCommentPrefix(ch) ?
|
2075
|
+
read(readComment(reader, ch), eofIsError, sentinel, isRecursive) :
|
2076
|
+
"else" ?
|
2077
|
+
readForm(reader, ch) :
|
2078
|
+
void(0);
|
2079
|
+
return form === reader ?
|
2080
|
+
(loop) :
|
2081
|
+
form;
|
2082
|
+
})();
|
2083
|
+
};
|
2084
|
+
return recur;
|
2085
|
+
})();
|
2086
|
+
};
|
2087
|
+
exports.read = read;
|
2088
|
+
|
2089
|
+
var read_ = function read_(source, uri) {
|
2090
|
+
var reader = pushBackReader(source, uri);
|
2091
|
+
var eof = gensym();
|
2092
|
+
return (function loop(forms, form) {
|
2093
|
+
var recur = loop;
|
2094
|
+
while (recur === loop) {
|
2095
|
+
recur = form === eof ?
|
2096
|
+
forms :
|
2097
|
+
(forms = conj(forms, form), form = read(reader, false, eof, false), loop);
|
2098
|
+
};
|
2099
|
+
return recur;
|
2100
|
+
})([], read(reader, false, eof, false));
|
2101
|
+
};
|
2102
|
+
exports.read_ = read_;
|
2103
|
+
|
2104
|
+
var readFromString = function readFromString(source, uri) {
|
2105
|
+
var reader = pushBackReader(source, uri);
|
2106
|
+
return read(reader, true, void(0), false);
|
2107
|
+
};
|
2108
|
+
exports.readFromString = readFromString;
|
2109
|
+
|
2110
|
+
var readUuid = function readUuid(uuid) {
|
2111
|
+
return isString(uuid) ?
|
2112
|
+
list(symbol(void(0), "UUID."), uuid) :
|
2113
|
+
readerError(void(0), "UUID literal expects a string as its representation.");
|
2114
|
+
};
|
2115
|
+
|
2116
|
+
var readQueue = function readQueue(items) {
|
2117
|
+
return isVector(items) ?
|
2118
|
+
list(symbol(void(0), "PersistentQueue."), items) :
|
2119
|
+
readerError(void(0), "Queue literal expects a vector for its elements.");
|
2120
|
+
};
|
2121
|
+
|
2122
|
+
var __tagTable__ = dictionary("uuid", readUuid, "queue", readQueue);
|
2123
|
+
exports.__tagTable__ = __tagTable__;
|
2124
|
+
|
2125
|
+
var maybeReadTaggedType = function maybeReadTaggedType(reader, initch) {
|
2126
|
+
var tag = readSymbol(reader, initch);
|
2127
|
+
var pfn = (__tagTable__ || 0)[name(tag)];
|
2128
|
+
return pfn ?
|
2129
|
+
pfn(read(reader, true, void(0), false)) :
|
2130
|
+
readerError(reader, "" + "Could not find tag parser for " + (name(tag)) + " in " + ("" + (keys(__tagTable__))));
|
2131
|
+
};
|
2132
|
+
exports.maybeReadTaggedType = maybeReadTaggedType
|
2133
|
+
|
2134
|
+
},{"./sequence":"zNvMnP","./runtime":"+Sggh0","./ast":"dcWfTp","./string":"BIHQiq"}],"wisp/ast":[function(require,module,exports){
|
2135
|
+
module.exports=require('dcWfTp');
|
2136
|
+
},{}],"dcWfTp":[function(require,module,exports){
|
2137
|
+
var vec = (require("./sequence")).vec;
|
2138
|
+
var map = (require("./sequence")).map;
|
2139
|
+
var last = (require("./sequence")).last;
|
2140
|
+
var count = (require("./sequence")).count;
|
2141
|
+
var second = (require("./sequence")).second;
|
2142
|
+
var first = (require("./sequence")).first;
|
2143
|
+
var isSequential = (require("./sequence")).isSequential;
|
2144
|
+
var isList = (require("./sequence")).isList;;
|
2145
|
+
|
2146
|
+
var join = (require("./string")).join;
|
2147
|
+
var split = (require("./string")).split;;
|
2148
|
+
|
2149
|
+
var isEqual = (require("./runtime")).isEqual;
|
2150
|
+
var subs = (require("./runtime")).subs;
|
2151
|
+
var inc = (require("./runtime")).inc;
|
2152
|
+
var str = (require("./runtime")).str;
|
2153
|
+
var isDictionary = (require("./runtime")).isDictionary;
|
2154
|
+
var isRePattern = (require("./runtime")).isRePattern;
|
2155
|
+
var isDate = (require("./runtime")).isDate;
|
2156
|
+
var isObject = (require("./runtime")).isObject;
|
2157
|
+
var isBoolean = (require("./runtime")).isBoolean;
|
2158
|
+
var isString = (require("./runtime")).isString;
|
2159
|
+
var isNumber = (require("./runtime")).isNumber;
|
2160
|
+
var isVector = (require("./runtime")).isVector;
|
2161
|
+
var isNil = (require("./runtime")).isNil;;
|
2162
|
+
|
2163
|
+
var withMeta = function withMeta(value, metadata) {
|
2164
|
+
Object.defineProperty(value, "metadata", {
|
2165
|
+
"value": metadata,
|
2166
|
+
"configurable": true
|
2167
|
+
});
|
2168
|
+
return value;
|
2169
|
+
};
|
2170
|
+
exports.withMeta = withMeta;
|
2171
|
+
|
2172
|
+
var meta = function meta(value) {
|
2173
|
+
return isObject(value) ?
|
2174
|
+
value.metadata :
|
2175
|
+
void(0);
|
2176
|
+
};
|
2177
|
+
exports.meta = meta;
|
2178
|
+
|
2179
|
+
var __nsSeparator__ = "⁄";
|
2180
|
+
exports.__nsSeparator__ = __nsSeparator__;
|
2181
|
+
|
2182
|
+
var Symbol = function Symbol(namespace, name) {
|
2183
|
+
this.namespace = namespace;
|
2184
|
+
this.name = name;
|
2185
|
+
return this;
|
2186
|
+
};
|
2187
|
+
|
2188
|
+
Symbol.type = "wisp.symbol";
|
2189
|
+
|
2190
|
+
Symbol.prototype.type = Symbol.type;
|
2191
|
+
|
2192
|
+
Symbol.prototype.toString = function() {
|
2193
|
+
var ns = namespace(this);
|
2194
|
+
return ns ?
|
2195
|
+
"" + ns + "/" + (name(this)) :
|
2196
|
+
"" + (name(this));
|
2197
|
+
};
|
2198
|
+
|
2199
|
+
var symbol = function symbol(ns, id) {
|
2200
|
+
return isSymbol(ns) ?
|
2201
|
+
ns :
|
2202
|
+
isKeyword(ns) ?
|
2203
|
+
new Symbol(namespace(ns), name(ns)) :
|
2204
|
+
isNil(id) ?
|
2205
|
+
new Symbol(void(0), ns) :
|
2206
|
+
"else" ?
|
2207
|
+
new Symbol(ns, id) :
|
2208
|
+
void(0);
|
2209
|
+
};
|
2210
|
+
exports.symbol = symbol;
|
2211
|
+
|
2212
|
+
var isSymbol = function isSymbol(x) {
|
2213
|
+
return x && (Symbol.type === x.type);
|
2214
|
+
};
|
2215
|
+
exports.isSymbol = isSymbol;
|
2216
|
+
|
2217
|
+
var isKeyword = function isKeyword(x) {
|
2218
|
+
return (isString(x)) && (count(x) > 1) && (first(x) === "꞉");
|
2219
|
+
};
|
2220
|
+
exports.isKeyword = isKeyword;
|
2221
|
+
|
2222
|
+
var keyword = function keyword(ns, id) {
|
2223
|
+
return isKeyword(ns) ?
|
2224
|
+
ns :
|
2225
|
+
isSymbol(ns) ?
|
2226
|
+
"" + "꞉" + (name(ns)) :
|
2227
|
+
isNil(id) ?
|
2228
|
+
"" + "꞉" + ns :
|
2229
|
+
isNil(ns) ?
|
2230
|
+
"" + "꞉" + id :
|
2231
|
+
"else" ?
|
2232
|
+
"" + "꞉" + ns + __nsSeparator__ + id :
|
2233
|
+
void(0);
|
2234
|
+
};
|
2235
|
+
exports.keyword = keyword;
|
2236
|
+
|
2237
|
+
var keywordName = function keywordName(value) {
|
2238
|
+
return last(split(subs(value, 1), __nsSeparator__));
|
2239
|
+
};
|
2240
|
+
|
2241
|
+
var name = function name(value) {
|
2242
|
+
return isSymbol(value) ?
|
2243
|
+
value.name :
|
2244
|
+
isKeyword(value) ?
|
2245
|
+
keywordName(value) :
|
2246
|
+
isString(value) ?
|
2247
|
+
value :
|
2248
|
+
"else" ?
|
2249
|
+
(function() { throw new TypeError("" + "Doesn't support name: " + value); })() :
|
2250
|
+
void(0);
|
2251
|
+
};
|
2252
|
+
exports.name = name;
|
2253
|
+
|
2254
|
+
var keywordNamespace = function keywordNamespace(x) {
|
2255
|
+
var parts = split(subs(x, 1), __nsSeparator__);
|
2256
|
+
return count(parts) > 1 ?
|
2257
|
+
(parts || 0)[0] :
|
2258
|
+
void(0);
|
2259
|
+
};
|
2260
|
+
|
2261
|
+
var namespace = function namespace(x) {
|
2262
|
+
return isSymbol(x) ?
|
2263
|
+
x.namespace :
|
2264
|
+
isKeyword(x) ?
|
2265
|
+
keywordNamespace(x) :
|
2266
|
+
"else" ?
|
2267
|
+
(function() { throw new TypeError("" + "Doesn't supports namespace: " + x); })() :
|
2268
|
+
void(0);
|
2269
|
+
};
|
2270
|
+
exports.namespace = namespace;
|
2271
|
+
|
2272
|
+
var gensym = function gensym(prefix) {
|
2273
|
+
return symbol("" + (isNil(prefix) ?
|
2274
|
+
"G__" :
|
2275
|
+
prefix) + (gensym.base = gensym.base + 1));
|
2276
|
+
};
|
2277
|
+
exports.gensym = gensym;
|
2278
|
+
|
2279
|
+
gensym.base = 0;
|
2280
|
+
|
2281
|
+
var isUnquote = function isUnquote(form) {
|
2282
|
+
return (isList(form)) && (isEqual(first(form), symbol(void(0), "unquote")));
|
2283
|
+
};
|
2284
|
+
exports.isUnquote = isUnquote;
|
2285
|
+
|
2286
|
+
var isUnquoteSplicing = function isUnquoteSplicing(form) {
|
2287
|
+
return (isList(form)) && (isEqual(first(form), symbol(void(0), "unquote-splicing")));
|
2288
|
+
};
|
2289
|
+
exports.isUnquoteSplicing = isUnquoteSplicing;
|
2290
|
+
|
2291
|
+
var isQuote = function isQuote(form) {
|
2292
|
+
return (isList(form)) && (isEqual(first(form), symbol(void(0), "quote")));
|
2293
|
+
};
|
2294
|
+
exports.isQuote = isQuote;
|
2295
|
+
|
2296
|
+
var isSyntaxQuote = function isSyntaxQuote(form) {
|
2297
|
+
return (isList(form)) && (isEqual(first(form), symbol(void(0), "syntax-quote")));
|
2298
|
+
};
|
2299
|
+
exports.isSyntaxQuote = isSyntaxQuote;
|
2300
|
+
|
2301
|
+
var normalize = function normalize(n, len) {
|
2302
|
+
return (function loop(ns) {
|
2303
|
+
var recur = loop;
|
2304
|
+
while (recur === loop) {
|
2305
|
+
recur = count(ns) < len ?
|
2306
|
+
(ns = "" + "0" + ns, loop) :
|
2307
|
+
ns;
|
2308
|
+
};
|
2309
|
+
return recur;
|
2310
|
+
})("" + n);
|
2311
|
+
};
|
2312
|
+
|
2313
|
+
var quoteString = function quoteString(s) {
|
2314
|
+
s = join("\\\"", split(s, "\""));
|
2315
|
+
s = join("\\\\", split(s, "\\"));
|
2316
|
+
s = join("\\b", split(s, ""));
|
2317
|
+
s = join("\\f", split(s, ""));
|
2318
|
+
s = join("\\n", split(s, "\n"));
|
2319
|
+
s = join("\\r", split(s, "\r"));
|
2320
|
+
s = join("\\t", split(s, "\t"));
|
2321
|
+
return "" + "\"" + s + "\"";
|
2322
|
+
};
|
2323
|
+
exports.quoteString = quoteString;
|
2324
|
+
|
2325
|
+
var prStr = function prStr(x) {
|
2326
|
+
return isNil(x) ?
|
2327
|
+
"nil" :
|
2328
|
+
isKeyword(x) ?
|
2329
|
+
namespace(x) ?
|
2330
|
+
"" + ":" + (namespace(x)) + "/" + (name(x)) :
|
2331
|
+
"" + ":" + (name(x)) :
|
2332
|
+
isString(x) ?
|
2333
|
+
quoteString(x) :
|
2334
|
+
isDate(x) ?
|
2335
|
+
"" + "#inst \"" + (x.getUTCFullYear()) + "-" + (normalize(inc(x.getUTCMonth()), 2)) + "-" + (normalize(x.getUTCDate(), 2)) + "T" + (normalize(x.getUTCHours(), 2)) + ":" + (normalize(x.getUTCMinutes(), 2)) + ":" + (normalize(x.getUTCSeconds(), 2)) + "." + (normalize(x.getUTCMilliseconds(), 3)) + "-" + "00:00\"" :
|
2336
|
+
isVector(x) ?
|
2337
|
+
"" + "[" + (join(" ", map(prStr, vec(x)))) + "]" :
|
2338
|
+
isDictionary(x) ?
|
2339
|
+
"" + "{" + (join(", ", map(function(pair) {
|
2340
|
+
return "" + (prStr(first(pair))) + " " + (prStr(second(pair)));
|
2341
|
+
}, x))) + "}" :
|
2342
|
+
isSequential(x) ?
|
2343
|
+
"" + "(" + (join(" ", map(prStr, vec(x)))) + ")" :
|
2344
|
+
isRePattern(x) ?
|
2345
|
+
"" + "#\"" + (join("\\/", split(x.source, "/"))) + "\"" :
|
2346
|
+
"else" ?
|
2347
|
+
"" + x :
|
2348
|
+
void(0);
|
2349
|
+
};
|
2350
|
+
exports.prStr = prStr
|
2351
|
+
|
2352
|
+
},{"./sequence":"zNvMnP","./string":"BIHQiq","./runtime":"+Sggh0"}],"wisp/compiler":[function(require,module,exports){
|
2353
|
+
module.exports=require('/EiAl9');
|
2354
|
+
},{}],"/EiAl9":[function(require,module,exports){
|
2355
|
+
var readFromString = (require("./reader")).readFromString;;
|
2356
|
+
|
2357
|
+
var prStr = (require("./ast")).prStr;
|
2358
|
+
var gensym = (require("./ast")).gensym;
|
2359
|
+
var name = (require("./ast")).name;
|
2360
|
+
var isSyntaxQuote = (require("./ast")).isSyntaxQuote;
|
2361
|
+
var isQuote = (require("./ast")).isQuote;
|
2362
|
+
var isUnquoteSplicing = (require("./ast")).isUnquoteSplicing;
|
2363
|
+
var isUnquote = (require("./ast")).isUnquote;
|
2364
|
+
var namespace = (require("./ast")).namespace;
|
2365
|
+
var keyword = (require("./ast")).keyword;
|
2366
|
+
var isKeyword = (require("./ast")).isKeyword;
|
2367
|
+
var symbol = (require("./ast")).symbol;
|
2368
|
+
var isSymbol = (require("./ast")).isSymbol;
|
2369
|
+
var withMeta = (require("./ast")).withMeta;
|
2370
|
+
var meta = (require("./ast")).meta;;
|
2371
|
+
|
2372
|
+
var concat = (require("./sequence")).concat;
|
2373
|
+
var take = (require("./sequence")).take;
|
2374
|
+
var filter = (require("./sequence")).filter;
|
2375
|
+
var map = (require("./sequence")).map;
|
2376
|
+
var repeat = (require("./sequence")).repeat;
|
2377
|
+
var last = (require("./sequence")).last;
|
2378
|
+
var vec = (require("./sequence")).vec;
|
2379
|
+
var reduce = (require("./sequence")).reduce;
|
2380
|
+
var reverse = (require("./sequence")).reverse;
|
2381
|
+
var conj = (require("./sequence")).conj;
|
2382
|
+
var cons = (require("./sequence")).cons;
|
2383
|
+
var rest = (require("./sequence")).rest;
|
2384
|
+
var third = (require("./sequence")).third;
|
2385
|
+
var second = (require("./sequence")).second;
|
2386
|
+
var first = (require("./sequence")).first;
|
2387
|
+
var list = (require("./sequence")).list;
|
2388
|
+
var isList = (require("./sequence")).isList;
|
2389
|
+
var count = (require("./sequence")).count;
|
2390
|
+
var isEmpty = (require("./sequence")).isEmpty;;
|
2391
|
+
|
2392
|
+
var isStrictEqual = (require("./runtime")).isStrictEqual;
|
2393
|
+
var isEqual = (require("./runtime")).isEqual;
|
2394
|
+
var int = (require("./runtime")).int;
|
2395
|
+
var char = (require("./runtime")).char;
|
2396
|
+
var str = (require("./runtime")).str;
|
2397
|
+
var dec = (require("./runtime")).dec;
|
2398
|
+
var inc = (require("./runtime")).inc;
|
2399
|
+
var isRePattern = (require("./runtime")).isRePattern;
|
2400
|
+
var isNil = (require("./runtime")).isNil;
|
2401
|
+
var isFalse = (require("./runtime")).isFalse;
|
2402
|
+
var isTrue = (require("./runtime")).isTrue;
|
2403
|
+
var reFind = (require("./runtime")).reFind;
|
2404
|
+
var subs = (require("./runtime")).subs;
|
2405
|
+
var isBoolean = (require("./runtime")).isBoolean;
|
2406
|
+
var isVector = (require("./runtime")).isVector;
|
2407
|
+
var isNumber = (require("./runtime")).isNumber;
|
2408
|
+
var isString = (require("./runtime")).isString;
|
2409
|
+
var mapDictionary = (require("./runtime")).mapDictionary;
|
2410
|
+
var isContainsVector = (require("./runtime")).isContainsVector;
|
2411
|
+
var vals = (require("./runtime")).vals;
|
2412
|
+
var keys = (require("./runtime")).keys;
|
2413
|
+
var merge = (require("./runtime")).merge;
|
2414
|
+
var dictionary = (require("./runtime")).dictionary;
|
2415
|
+
var isDictionary = (require("./runtime")).isDictionary;
|
2416
|
+
var isOdd = (require("./runtime")).isOdd;;
|
2417
|
+
|
2418
|
+
var replace = (require("./string")).replace;
|
2419
|
+
var upperCase = (require("./string")).upperCase;
|
2420
|
+
var join = (require("./string")).join;
|
2421
|
+
var split = (require("./string")).split;;
|
2422
|
+
|
2423
|
+
var writeBoolean = (require("./backend/javascript/writer")).writeBoolean;
|
2424
|
+
var writeNumber = (require("./backend/javascript/writer")).writeNumber;
|
2425
|
+
var writeString = (require("./backend/javascript/writer")).writeString;
|
2426
|
+
var writeNumber = (require("./backend/javascript/writer")).writeNumber;
|
2427
|
+
var writeComment = (require("./backend/javascript/writer")).writeComment;
|
2428
|
+
var writeNil = (require("./backend/javascript/writer")).writeNil;
|
2429
|
+
var writeSymbol = (require("./backend/javascript/writer")).writeSymbol;
|
2430
|
+
var writeKeyword = (require("./backend/javascript/writer")).writeKeyword;
|
2431
|
+
var writeKeywordReference = (require("./backend/javascript/writer")).writeKeywordReference;
|
2432
|
+
var writeReference = (require("./backend/javascript/writer")).writeReference;;
|
2433
|
+
|
2434
|
+
var isSelfEvaluating = function isSelfEvaluating(form) {
|
2435
|
+
return (isNumber(form)) || ((isString(form)) && (!(isSymbol(form))) && (!(isKeyword(form)))) || (isBoolean(form)) || (isNil(form)) || (isRePattern(form));
|
2436
|
+
};
|
2437
|
+
exports.isSelfEvaluating = isSelfEvaluating;
|
2438
|
+
|
2439
|
+
var __macros__ = {};
|
2440
|
+
exports.__macros__ = __macros__;
|
2441
|
+
|
2442
|
+
var executeMacro = function executeMacro(name, form) {
|
2443
|
+
return (__macros__ || 0)[name].apply((__macros__ || 0)[name], vec(form));
|
2444
|
+
};
|
2445
|
+
exports.executeMacro = executeMacro;
|
2446
|
+
|
2447
|
+
var installMacro = function installMacro(name, macroFn) {
|
2448
|
+
return (__macros__ || 0)[name] = macroFn;
|
2449
|
+
};
|
2450
|
+
exports.installMacro = installMacro;
|
2451
|
+
|
2452
|
+
var isMacro = function isMacro(name) {
|
2453
|
+
return (isSymbol(name)) && ((__macros__ || 0)[name]) && true;
|
2454
|
+
};
|
2455
|
+
exports.isMacro = isMacro;
|
2456
|
+
|
2457
|
+
var makeMacro = function makeMacro(pattern, body) {
|
2458
|
+
var macroFn = concat(list(symbol(void(0), "fn"), pattern), body);
|
2459
|
+
return eval("" + "(" + (compile(macroexpand(macroFn))) + ")");
|
2460
|
+
};
|
2461
|
+
exports.makeMacro = makeMacro;
|
2462
|
+
|
2463
|
+
installMacro(symbol(void(0), "defmacro"), function(name, signature) {
|
2464
|
+
var body = Array.prototype.slice.call(arguments, 2);
|
2465
|
+
return installMacro(name, makeMacro(signature, body));
|
2466
|
+
});
|
2467
|
+
|
2468
|
+
var __specials__ = {};
|
2469
|
+
exports.__specials__ = __specials__;
|
2470
|
+
|
2471
|
+
var installSpecial = function installSpecial(name, f, validator) {
|
2472
|
+
return (__specials__ || 0)[name] = function(form) {
|
2473
|
+
validator ?
|
2474
|
+
validator(form) :
|
2475
|
+
void(0);
|
2476
|
+
return f(withMeta(rest(form), meta(form)));
|
2477
|
+
};
|
2478
|
+
};
|
2479
|
+
exports.installSpecial = installSpecial;
|
2480
|
+
|
2481
|
+
var isSpecial = function isSpecial(name) {
|
2482
|
+
return (isSymbol(name)) && ((__specials__ || 0)[name]) && true;
|
2483
|
+
};
|
2484
|
+
exports.isSpecial = isSpecial;
|
2485
|
+
|
2486
|
+
var executeSpecial = function executeSpecial(name, form) {
|
2487
|
+
return ((__specials__ || 0)[name])(form);
|
2488
|
+
};
|
2489
|
+
exports.executeSpecial = executeSpecial;
|
2490
|
+
|
2491
|
+
var opt = function opt(argument, fallback) {
|
2492
|
+
return (isNil(argument)) || (isEmpty(argument)) ?
|
2493
|
+
fallback :
|
2494
|
+
first(argument);
|
2495
|
+
};
|
2496
|
+
exports.opt = opt;
|
2497
|
+
|
2498
|
+
var applyForm = function applyForm(fnName, form, isQuoted) {
|
2499
|
+
return cons(fnName, isQuoted ?
|
2500
|
+
map(function(e) {
|
2501
|
+
return list(symbol(void(0), "quote"), e);
|
2502
|
+
}, form) :
|
2503
|
+
form, form);
|
2504
|
+
};
|
2505
|
+
exports.applyForm = applyForm;
|
2506
|
+
|
2507
|
+
var applyUnquotedForm = function applyUnquotedForm(fnName, form) {
|
2508
|
+
return cons(fnName, map(function(e) {
|
2509
|
+
return isUnquote(e) ?
|
2510
|
+
second(e) :
|
2511
|
+
(isList(e)) && (isKeyword(first(e))) ?
|
2512
|
+
list(symbol(void(0), "syntax-quote"), second(e)) :
|
2513
|
+
list(symbol(void(0), "syntax-quote"), e);
|
2514
|
+
}, form));
|
2515
|
+
};
|
2516
|
+
exports.applyUnquotedForm = applyUnquotedForm;
|
2517
|
+
|
2518
|
+
var splitSplices = function splitSplices(form, fnName) {
|
2519
|
+
var makeSplice = function makeSplice(form) {
|
2520
|
+
return (isSelfEvaluating(form)) || (isSymbol(form)) ?
|
2521
|
+
applyUnquotedForm(fnName, list(form)) :
|
2522
|
+
applyUnquotedForm(fnName, form);
|
2523
|
+
};
|
2524
|
+
return (function loop(nodes, slices, acc) {
|
2525
|
+
var recur = loop;
|
2526
|
+
while (recur === loop) {
|
2527
|
+
recur = isEmpty(nodes) ?
|
2528
|
+
reverse(isEmpty(acc) ?
|
2529
|
+
slices :
|
2530
|
+
cons(makeSplice(reverse(acc)), slices)) :
|
2531
|
+
(function() {
|
2532
|
+
var node = first(nodes);
|
2533
|
+
return isUnquoteSplicing(node) ?
|
2534
|
+
(nodes = rest(nodes), slices = cons(second(node), isEmpty(acc) ?
|
2535
|
+
slices :
|
2536
|
+
cons(makeSplice(reverse(acc)), slices)), acc = list(), loop) :
|
2537
|
+
(nodes = rest(nodes), slices = slices, acc = cons(node, acc), loop);
|
2538
|
+
})();
|
2539
|
+
};
|
2540
|
+
return recur;
|
2541
|
+
})(form, list(), list());
|
2542
|
+
};
|
2543
|
+
exports.splitSplices = splitSplices;
|
2544
|
+
|
2545
|
+
var syntaxQuoteSplit = function syntaxQuoteSplit(appendName, fnName, form) {
|
2546
|
+
var slices = splitSplices(form, fnName);
|
2547
|
+
var n = count(slices);
|
2548
|
+
return n === 0 ?
|
2549
|
+
list(fnName) :
|
2550
|
+
n === 1 ?
|
2551
|
+
first(slices) :
|
2552
|
+
"default" ?
|
2553
|
+
applyForm(appendName, slices) :
|
2554
|
+
void(0);
|
2555
|
+
};
|
2556
|
+
exports.syntaxQuoteSplit = syntaxQuoteSplit;
|
2557
|
+
|
2558
|
+
var compileObject = function compileObject(form, isQuoted) {
|
2559
|
+
return isKeyword(form) ?
|
2560
|
+
writeKeyword(form) :
|
2561
|
+
isSymbol(form) ?
|
2562
|
+
writeSymbol(form) :
|
2563
|
+
isNumber(form) ?
|
2564
|
+
writeNumber(form) :
|
2565
|
+
isString(form) ?
|
2566
|
+
writeString(form) :
|
2567
|
+
isBoolean(form) ?
|
2568
|
+
writeBoolean(form) :
|
2569
|
+
isNil(form) ?
|
2570
|
+
writeNil(form) :
|
2571
|
+
isRePattern(form) ?
|
2572
|
+
compileRePattern(form) :
|
2573
|
+
isVector(form) ?
|
2574
|
+
compile(applyForm(symbol(void(0), "vector"), list.apply(list, form), isQuoted)) :
|
2575
|
+
isList(form) ?
|
2576
|
+
compile(applyForm(symbol(void(0), "list"), form, isQuoted)) :
|
2577
|
+
isDictionary(form) ?
|
2578
|
+
compileDictionary(isQuoted ?
|
2579
|
+
mapDictionary(form, function(x) {
|
2580
|
+
return list(symbol(void(0), "quote"), x);
|
2581
|
+
}) :
|
2582
|
+
form) :
|
2583
|
+
void(0);
|
2584
|
+
};
|
2585
|
+
exports.compileObject = compileObject;
|
2586
|
+
|
2587
|
+
var compileSyntaxQuotedVector = function compileSyntaxQuotedVector(form) {
|
2588
|
+
var concatForm = syntaxQuoteSplit(symbol(void(0), "concat"), symbol(void(0), "vector"), list.apply(list, form));
|
2589
|
+
return compile(count(concatForm) > 1 ?
|
2590
|
+
list(symbol(void(0), "vec"), concatForm) :
|
2591
|
+
concatForm);
|
2592
|
+
};
|
2593
|
+
exports.compileSyntaxQuotedVector = compileSyntaxQuotedVector;
|
2594
|
+
|
2595
|
+
var compileSyntaxQuoted = function compileSyntaxQuoted(form) {
|
2596
|
+
return isList(form) ?
|
2597
|
+
compile(syntaxQuoteSplit(symbol(void(0), "concat"), symbol(void(0), "list"), form)) :
|
2598
|
+
isVector(form) ?
|
2599
|
+
compileSyntaxQuotedVector(form) :
|
2600
|
+
"else" ?
|
2601
|
+
compileObject(form) :
|
2602
|
+
void(0);
|
2603
|
+
};
|
2604
|
+
exports.compileSyntaxQuoted = compileSyntaxQuoted;
|
2605
|
+
|
2606
|
+
var compile = function compile(form) {
|
2607
|
+
return isSelfEvaluating(form) ?
|
2608
|
+
compileObject(form) :
|
2609
|
+
isSymbol(form) ?
|
2610
|
+
writeReference(form) :
|
2611
|
+
isKeyword(form) ?
|
2612
|
+
writeKeywordReference(form) :
|
2613
|
+
isVector(form) ?
|
2614
|
+
compileObject(form) :
|
2615
|
+
isDictionary(form) ?
|
2616
|
+
compileObject(form) :
|
2617
|
+
isList(form) ?
|
2618
|
+
(function() {
|
2619
|
+
var head = first(form);
|
2620
|
+
return isEmpty(form) ?
|
2621
|
+
compileObject(form, true) :
|
2622
|
+
isQuote(form) ?
|
2623
|
+
compileObject(second(form), true) :
|
2624
|
+
isSyntaxQuote(form) ?
|
2625
|
+
compileSyntaxQuoted(second(form)) :
|
2626
|
+
isSpecial(head) ?
|
2627
|
+
executeSpecial(head, form) :
|
2628
|
+
isKeyword(head) ?
|
2629
|
+
compile(list(symbol(void(0), "get"), second(form), head)) :
|
2630
|
+
"else" ?
|
2631
|
+
(function() {
|
2632
|
+
return !((isSymbol(head)) || (isList(head))) ?
|
2633
|
+
(function() { throw compilerError(form, "" + "operator is not a procedure: " + head); })() :
|
2634
|
+
compileInvoke(form);
|
2635
|
+
})() :
|
2636
|
+
void(0);
|
2637
|
+
})() :
|
2638
|
+
void(0);
|
2639
|
+
};
|
2640
|
+
exports.compile = compile;
|
2641
|
+
|
2642
|
+
var compile_ = function compile_(forms) {
|
2643
|
+
return reduce(function(result, form) {
|
2644
|
+
return "" + result + (isEmpty(result) ?
|
2645
|
+
"" :
|
2646
|
+
";\n\n") + (compile(isList(form) ?
|
2647
|
+
withMeta(macroexpand(form), conj({
|
2648
|
+
"top": true
|
2649
|
+
}, meta(form))) :
|
2650
|
+
form));
|
2651
|
+
}, "", forms);
|
2652
|
+
};
|
2653
|
+
exports.compile_ = compile_;
|
2654
|
+
|
2655
|
+
var compileProgram = function compileProgram(forms) {
|
2656
|
+
return reduce(function(result, form) {
|
2657
|
+
return "" + result + (isEmpty(result) ?
|
2658
|
+
"" :
|
2659
|
+
";\n\n") + (compile(isList(form) ?
|
2660
|
+
withMeta(macroexpand(form), conj({
|
2661
|
+
"top": true
|
2662
|
+
}, meta(form))) :
|
2663
|
+
form));
|
2664
|
+
}, "", forms);
|
2665
|
+
};
|
2666
|
+
exports.compileProgram = compileProgram;
|
2667
|
+
|
2668
|
+
var macroexpand1 = function macroexpand1(form) {
|
2669
|
+
return isList(form) ?
|
2670
|
+
(function() {
|
2671
|
+
var op = first(form);
|
2672
|
+
var id = isSymbol(op) ?
|
2673
|
+
name(op) :
|
2674
|
+
void(0);
|
2675
|
+
return isSpecial(op) ?
|
2676
|
+
form :
|
2677
|
+
isMacro(op) ?
|
2678
|
+
executeMacro(op, rest(form)) :
|
2679
|
+
(isSymbol(op)) && (!(id === ".")) ?
|
2680
|
+
first(id) === "." ?
|
2681
|
+
count(form) < 2 ?
|
2682
|
+
(function() { throw Error("Malformed member expression, expecting (.member target ...)"); })() :
|
2683
|
+
cons(symbol(void(0), "."), cons(second(form), cons(symbol(subs(id, 1)), rest(rest(form))))) :
|
2684
|
+
last(id) === "." ?
|
2685
|
+
cons(symbol(void(0), "new"), cons(symbol(subs(id, 0, dec(count(id)))), rest(form))) :
|
2686
|
+
form :
|
2687
|
+
"else" ?
|
2688
|
+
form :
|
2689
|
+
void(0);
|
2690
|
+
})() :
|
2691
|
+
form;
|
2692
|
+
};
|
2693
|
+
exports.macroexpand1 = macroexpand1;
|
2694
|
+
|
2695
|
+
var macroexpand = function macroexpand(form) {
|
2696
|
+
return (function loop(original, expanded) {
|
2697
|
+
var recur = loop;
|
2698
|
+
while (recur === loop) {
|
2699
|
+
recur = original === expanded ?
|
2700
|
+
original :
|
2701
|
+
(original = expanded, expanded = macroexpand1(expanded), loop);
|
2702
|
+
};
|
2703
|
+
return recur;
|
2704
|
+
})(form, macroexpand1(form));
|
2705
|
+
};
|
2706
|
+
exports.macroexpand = macroexpand;
|
2707
|
+
|
2708
|
+
var _lineBreakPattern_ = /\n(?=[^\n])/m;
|
2709
|
+
exports._lineBreakPattern_ = _lineBreakPattern_;
|
2710
|
+
|
2711
|
+
var indent = function indent(code, indentation) {
|
2712
|
+
return join(indentation, split(code, _lineBreakPattern_));
|
2713
|
+
};
|
2714
|
+
exports.indent = indent;
|
2715
|
+
|
2716
|
+
var compileTemplate = function compileTemplate(form) {
|
2717
|
+
var indentPattern = /\n *$/;
|
2718
|
+
var getIndentation = function(code) {
|
2719
|
+
return (reFind(indentPattern, code)) || "\n";
|
2720
|
+
};
|
2721
|
+
return (function loop(code, parts, values) {
|
2722
|
+
var recur = loop;
|
2723
|
+
while (recur === loop) {
|
2724
|
+
recur = count(parts) > 1 ?
|
2725
|
+
(code = "" + code + (first(parts)) + (indent("" + (first(values)), getIndentation(first(parts)))), parts = rest(parts), values = rest(values), loop) :
|
2726
|
+
"" + code + (first(parts));
|
2727
|
+
};
|
2728
|
+
return recur;
|
2729
|
+
})("", split(first(form), "~{}"), rest(form));
|
2730
|
+
};
|
2731
|
+
exports.compileTemplate = compileTemplate;
|
2732
|
+
|
2733
|
+
var compileDef = function compileDef(form) {
|
2734
|
+
var id = first(form);
|
2735
|
+
var isExport = ((((meta(form)) || {}) || 0)["top"]) && (!((((meta(id)) || {}) || 0)["private"]));
|
2736
|
+
var attribute = symbol(namespace(id), "" + "-" + (name(id)));
|
2737
|
+
return isExport ?
|
2738
|
+
compileTemplate(list("var ~{};\n~{}", compile(cons(symbol(void(0), "set!"), form)), compile(list(symbol(void(0), "set!"), list(symbol(void(0), "."), symbol(void(0), "exports"), attribute), id)))) :
|
2739
|
+
compileTemplate(list("var ~{}", compile(cons(symbol(void(0), "set!"), form))));
|
2740
|
+
};
|
2741
|
+
exports.compileDef = compileDef;
|
2742
|
+
|
2743
|
+
var compileIfElse = function compileIfElse(form) {
|
2744
|
+
var condition = macroexpand(first(form));
|
2745
|
+
var thenExpression = macroexpand(second(form));
|
2746
|
+
var elseExpression = macroexpand(third(form));
|
2747
|
+
return compileTemplate(list((isList(elseExpression)) && (isEqual(first(elseExpression), symbol(void(0), "if"))) ?
|
2748
|
+
"~{} ?\n ~{} :\n~{}" :
|
2749
|
+
"~{} ?\n ~{} :\n ~{}", compile(condition), compile(thenExpression), compile(elseExpression)));
|
2750
|
+
};
|
2751
|
+
exports.compileIfElse = compileIfElse;
|
2752
|
+
|
2753
|
+
var compileDictionary = function compileDictionary(form) {
|
2754
|
+
var body = (function loop(body, names) {
|
2755
|
+
var recur = loop;
|
2756
|
+
while (recur === loop) {
|
2757
|
+
recur = isEmpty(names) ?
|
2758
|
+
body :
|
2759
|
+
(body = "" + (isNil(body) ?
|
2760
|
+
"" :
|
2761
|
+
"" + body + ",\n") + (compileTemplate(list("~{}: ~{}", compile(first(names)), compile(macroexpand((form || 0)[first(names)]))))), names = rest(names), loop);
|
2762
|
+
};
|
2763
|
+
return recur;
|
2764
|
+
})(void(0), keys(form));
|
2765
|
+
return isNil(body) ?
|
2766
|
+
"{}" :
|
2767
|
+
compileTemplate(list("{\n ~{}\n}", body));
|
2768
|
+
};
|
2769
|
+
exports.compileDictionary = compileDictionary;
|
2770
|
+
|
2771
|
+
var desugarFnName = function desugarFnName(form) {
|
2772
|
+
return (isSymbol(first(form))) || (isNil(first(form))) ?
|
2773
|
+
form :
|
2774
|
+
cons(void(0), form);
|
2775
|
+
};
|
2776
|
+
exports.desugarFnName = desugarFnName;
|
2777
|
+
|
2778
|
+
var desugarFnDoc = function desugarFnDoc(form) {
|
2779
|
+
return (isString(second(form))) || (isNil(second(form))) ?
|
2780
|
+
form :
|
2781
|
+
cons(first(form), cons(void(0), rest(form)));
|
2782
|
+
};
|
2783
|
+
exports.desugarFnDoc = desugarFnDoc;
|
2784
|
+
|
2785
|
+
var desugarFnAttrs = function desugarFnAttrs(form) {
|
2786
|
+
return (isDictionary(third(form))) || (isNil(third(form))) ?
|
2787
|
+
form :
|
2788
|
+
cons(first(form), cons(second(form), cons(void(0), rest(rest(form)))));
|
2789
|
+
};
|
2790
|
+
exports.desugarFnAttrs = desugarFnAttrs;
|
2791
|
+
|
2792
|
+
var compileDesugaredFn = function compileDesugaredFn(name, doc, attrs, params, body) {
|
2793
|
+
return compileTemplate(isNil(name) ?
|
2794
|
+
list("function(~{}) {\n ~{}\n}", join(", ", map(compile, (params || 0)["names"])), compileFnBody(map(macroexpand, body), params)) :
|
2795
|
+
list("function ~{}(~{}) {\n ~{}\n}", compile(name), join(", ", map(compile, (params || 0)["names"])), compileFnBody(map(macroexpand, body), params)));
|
2796
|
+
};
|
2797
|
+
exports.compileDesugaredFn = compileDesugaredFn;
|
2798
|
+
|
2799
|
+
var compileStatements = function compileStatements(form, prefix) {
|
2800
|
+
return (function loop(result, expression, expressions) {
|
2801
|
+
var recur = loop;
|
2802
|
+
while (recur === loop) {
|
2803
|
+
recur = isEmpty(expressions) ?
|
2804
|
+
"" + result + (isNil(prefix) ?
|
2805
|
+
"" :
|
2806
|
+
prefix) + (compile(macroexpand(expression))) + ";" :
|
2807
|
+
(result = "" + result + (compile(macroexpand(expression))) + ";\n", expression = first(expressions), expressions = rest(expressions), loop);
|
2808
|
+
};
|
2809
|
+
return recur;
|
2810
|
+
})("", first(form), rest(form));
|
2811
|
+
};
|
2812
|
+
exports.compileStatements = compileStatements;
|
2813
|
+
|
2814
|
+
var compileFnBody = function compileFnBody(form, params) {
|
2815
|
+
return (isDictionary(params)) && ((params || 0)["rest"]) ?
|
2816
|
+
compileStatements(cons(list(symbol(void(0), "def"), (params || 0)["rest"], list(symbol(void(0), "Array.prototype.slice.call"), symbol(void(0), "arguments"), (params || 0)["arity"])), form), "return ") :
|
2817
|
+
(count(form) === 1) && (isList(first(form))) && (isEqual(first(first(form)), symbol(void(0), "do"))) ?
|
2818
|
+
compileFnBody(rest(first(form)), params) :
|
2819
|
+
compileStatements(form, "return ");
|
2820
|
+
};
|
2821
|
+
exports.compileFnBody = compileFnBody;
|
2822
|
+
|
2823
|
+
var desugarParams = function desugarParams(params) {
|
2824
|
+
return (function loop(names, params) {
|
2825
|
+
var recur = loop;
|
2826
|
+
while (recur === loop) {
|
2827
|
+
recur = isEmpty(params) ?
|
2828
|
+
{
|
2829
|
+
"names": names,
|
2830
|
+
"arity": count(names),
|
2831
|
+
"rest": void(0)
|
2832
|
+
} :
|
2833
|
+
isEqual(first(params), symbol(void(0), "&")) ?
|
2834
|
+
isEqual(count(params), 1) ?
|
2835
|
+
{
|
2836
|
+
"names": names,
|
2837
|
+
"arity": count(names),
|
2838
|
+
"rest": void(0)
|
2839
|
+
} :
|
2840
|
+
isEqual(count(params), 2) ?
|
2841
|
+
{
|
2842
|
+
"names": names,
|
2843
|
+
"arity": count(names),
|
2844
|
+
"rest": second(params)
|
2845
|
+
} :
|
2846
|
+
"else" ?
|
2847
|
+
(function() { throw TypeError("Unexpected number of parameters after &"); })() :
|
2848
|
+
void(0) :
|
2849
|
+
"else" ?
|
2850
|
+
(names = conj(names, first(params)), params = rest(params), loop) :
|
2851
|
+
void(0);
|
2852
|
+
};
|
2853
|
+
return recur;
|
2854
|
+
})([], params);
|
2855
|
+
};
|
2856
|
+
exports.desugarParams = desugarParams;
|
2857
|
+
|
2858
|
+
var analyzeOverloadedFn = function analyzeOverloadedFn(name, doc, attrs, overloads) {
|
2859
|
+
return map(function(overload) {
|
2860
|
+
var params = desugarParams(first(overload));
|
2861
|
+
return {
|
2862
|
+
"rest": (params || 0)["rest"],
|
2863
|
+
"names": (params || 0)["names"],
|
2864
|
+
"arity": (params || 0)["arity"],
|
2865
|
+
"body": rest(overload)
|
2866
|
+
};
|
2867
|
+
}, overloads);
|
2868
|
+
};
|
2869
|
+
exports.analyzeOverloadedFn = analyzeOverloadedFn;
|
2870
|
+
|
2871
|
+
var compileOverloadedFn = function compileOverloadedFn(name, doc, attrs, overloads) {
|
2872
|
+
var methods = analyzeOverloadedFn(name, doc, attrs, overloads);
|
2873
|
+
var fixedMethods = filter(function(method) {
|
2874
|
+
return !((method || 0)["rest"]);
|
2875
|
+
}, methods);
|
2876
|
+
var variadic = first(filter(function(method) {
|
2877
|
+
return (method || 0)["rest"];
|
2878
|
+
}, methods));
|
2879
|
+
var names = reduce(function(names, params) {
|
2880
|
+
return count(names) > (params || 0)["arity"] ?
|
2881
|
+
names :
|
2882
|
+
(params || 0)["names"];
|
2883
|
+
}, [], methods);
|
2884
|
+
return list(symbol(void(0), "fn"), name, doc, attrs, names, list(symbol(void(0), "raw*"), compileSwitch(symbol(void(0), "arguments.length"), map(function(method) {
|
2885
|
+
return cons((method || 0)["arity"], list(symbol(void(0), "raw*"), compileFnBody(concat(compileRebind(names, (method || 0)["names"]), (method || 0)["body"]))));
|
2886
|
+
}, fixedMethods), isNil(variadic) ?
|
2887
|
+
list(symbol(void(0), "throw"), list(symbol(void(0), "Error"), "Invalid arity")) :
|
2888
|
+
list(symbol(void(0), "raw*"), compileFnBody(concat(compileRebind(cons(list(symbol(void(0), "Array.prototype.slice.call"), symbol(void(0), "arguments"), (variadic || 0)["arity"]), names), cons((variadic || 0)["rest"], (variadic || 0)["names"])), (variadic || 0)["body"]))))), void(0));
|
2889
|
+
};
|
2890
|
+
exports.compileOverloadedFn = compileOverloadedFn;
|
2891
|
+
|
2892
|
+
var compileRebind = function compileRebind(bindings, names) {
|
2893
|
+
return (function loop(form, bindings, names) {
|
2894
|
+
var recur = loop;
|
2895
|
+
while (recur === loop) {
|
2896
|
+
recur = isEmpty(names) ?
|
2897
|
+
reverse(form) :
|
2898
|
+
(form = isEqual(first(names), first(bindings)) ?
|
2899
|
+
form :
|
2900
|
+
cons(list(symbol(void(0), "def"), first(names), first(bindings)), form), bindings = rest(bindings), names = rest(names), loop);
|
2901
|
+
};
|
2902
|
+
return recur;
|
2903
|
+
})(list(), bindings, names);
|
2904
|
+
};
|
2905
|
+
exports.compileRebind = compileRebind;
|
2906
|
+
|
2907
|
+
var compileSwitchCases = function compileSwitchCases(cases) {
|
2908
|
+
return reduce(function(form, caseExpression) {
|
2909
|
+
return "" + form + (compileTemplate(list("case ~{}:\n ~{}\n", compile(macroexpand(first(caseExpression))), compile(macroexpand(rest(caseExpression))))));
|
2910
|
+
}, "", cases);
|
2911
|
+
};
|
2912
|
+
exports.compileSwitchCases = compileSwitchCases;
|
2913
|
+
|
2914
|
+
var compileSwitch = function compileSwitch(value, cases, defaultCase) {
|
2915
|
+
return compileTemplate(list("switch (~{}) {\n ~{}\n default:\n ~{}\n}", compile(macroexpand(value)), compileSwitchCases(cases), compile(macroexpand(defaultCase))));
|
2916
|
+
};
|
2917
|
+
exports.compileSwitch = compileSwitch;
|
2918
|
+
|
2919
|
+
var compileFn = function compileFn(form) {
|
2920
|
+
var signature = desugarFnAttrs(desugarFnDoc(desugarFnName(form)));
|
2921
|
+
var name = first(signature);
|
2922
|
+
var doc = second(signature);
|
2923
|
+
var attrs = third(signature);
|
2924
|
+
return isVector(third(rest(signature))) ?
|
2925
|
+
compileDesugaredFn(name, doc, attrs, desugarParams(third(rest(signature))), rest(rest(rest(rest(signature))))) :
|
2926
|
+
compile(compileOverloadedFn(name, doc, attrs, rest(rest(rest(signature)))));
|
2927
|
+
};
|
2928
|
+
exports.compileFn = compileFn;
|
2929
|
+
|
2930
|
+
var compileInvoke = function compileInvoke(form) {
|
2931
|
+
return compileTemplate(list(isList(first(form)) ?
|
2932
|
+
"(~{})(~{})" :
|
2933
|
+
"~{}(~{})", compile(first(form)), compileGroup(rest(form))));
|
2934
|
+
};
|
2935
|
+
exports.compileInvoke = compileInvoke;
|
2936
|
+
|
2937
|
+
var compileGroup = function compileGroup(form, wrap) {
|
2938
|
+
return wrap ?
|
2939
|
+
"" + "(" + (compileGroup(form)) + ")" :
|
2940
|
+
join(", ", vec(map(compile, map(macroexpand, form))));
|
2941
|
+
};
|
2942
|
+
exports.compileGroup = compileGroup;
|
2943
|
+
|
2944
|
+
var compileDo = function compileDo(form) {
|
2945
|
+
return compile(list(cons(symbol(void(0), "fn"), cons([], form))));
|
2946
|
+
};
|
2947
|
+
exports.compileDo = compileDo;
|
2948
|
+
|
2949
|
+
var defineBindings = function defineBindings(form) {
|
2950
|
+
return (function loop(defs, bindings) {
|
2951
|
+
var recur = loop;
|
2952
|
+
while (recur === loop) {
|
2953
|
+
recur = count(bindings) === 0 ?
|
2954
|
+
reverse(defs) :
|
2955
|
+
(defs = cons(list(symbol(void(0), "def"), (bindings || 0)[0], (bindings || 0)[1]), defs), bindings = rest(rest(bindings)), loop);
|
2956
|
+
};
|
2957
|
+
return recur;
|
2958
|
+
})(list(), form);
|
2959
|
+
};
|
2960
|
+
exports.defineBindings = defineBindings;
|
2961
|
+
|
2962
|
+
var compileThrow = function compileThrow(form) {
|
2963
|
+
return compileTemplate(list("(function() { throw ~{}; })()", compile(macroexpand(first(form)))));
|
2964
|
+
};
|
2965
|
+
exports.compileThrow = compileThrow;
|
2966
|
+
|
2967
|
+
var compileSet = function compileSet(form) {
|
2968
|
+
return compileTemplate(list("~{} = ~{}", compile(macroexpand(first(form))), compile(macroexpand(second(form)))));
|
2969
|
+
};
|
2970
|
+
exports.compileSet = compileSet;
|
2971
|
+
|
2972
|
+
var compileVector = function compileVector(form) {
|
2973
|
+
return compileTemplate(list("[~{}]", compileGroup(form)));
|
2974
|
+
};
|
2975
|
+
exports.compileVector = compileVector;
|
2976
|
+
|
2977
|
+
var compileTry = function compileTry(form) {
|
2978
|
+
return (function loop(tryExprs, catchExprs, finallyExprs, exprs) {
|
2979
|
+
var recur = loop;
|
2980
|
+
while (recur === loop) {
|
2981
|
+
recur = isEmpty(exprs) ?
|
2982
|
+
isEmpty(catchExprs) ?
|
2983
|
+
compileTemplate(list("(function() {\ntry {\n ~{}\n} finally {\n ~{}\n}})()", compileFnBody(tryExprs), compileFnBody(finallyExprs))) :
|
2984
|
+
isEmpty(finallyExprs) ?
|
2985
|
+
compileTemplate(list("(function() {\ntry {\n ~{}\n} catch (~{}) {\n ~{}\n}})()", compileFnBody(tryExprs), compile(first(catchExprs)), compileFnBody(rest(catchExprs)))) :
|
2986
|
+
compileTemplate(list("(function() {\ntry {\n ~{}\n} catch (~{}) {\n ~{}\n} finally {\n ~{}\n}})()", compileFnBody(tryExprs), compile(first(catchExprs)), compileFnBody(rest(catchExprs)), compileFnBody(finallyExprs))) :
|
2987
|
+
isEqual(first(first(exprs)), symbol(void(0), "catch")) ?
|
2988
|
+
(tryExprs = tryExprs, catchExprs = rest(first(exprs)), finallyExprs = finallyExprs, exprs = rest(exprs), loop) :
|
2989
|
+
isEqual(first(first(exprs)), symbol(void(0), "finally")) ?
|
2990
|
+
(tryExprs = tryExprs, catchExprs = catchExprs, finallyExprs = rest(first(exprs)), exprs = rest(exprs), loop) :
|
2991
|
+
(tryExprs = cons(first(exprs), tryExprs), catchExprs = catchExprs, finallyExprs = finallyExprs, exprs = rest(exprs), loop);
|
2992
|
+
};
|
2993
|
+
return recur;
|
2994
|
+
})(list(), list(), list(), reverse(form));
|
2995
|
+
};
|
2996
|
+
exports.compileTry = compileTry;
|
2997
|
+
|
2998
|
+
var compileProperty = function compileProperty(form) {
|
2999
|
+
return (name(second(form)))[0] === "-" ?
|
3000
|
+
compileTemplate(list(isList(first(form)) ?
|
3001
|
+
"(~{}).~{}" :
|
3002
|
+
"~{}.~{}", compile(macroexpand(first(form))), compile(macroexpand(symbol(subs(name(second(form)), 1)))))) :
|
3003
|
+
compileTemplate(list("~{}.~{}(~{})", compile(macroexpand(first(form))), compile(macroexpand(second(form))), compileGroup(rest(rest(form)))));
|
3004
|
+
};
|
3005
|
+
exports.compileProperty = compileProperty;
|
3006
|
+
|
3007
|
+
var compileApply = function compileApply(form) {
|
3008
|
+
return compile(list(symbol(void(0), "."), first(form), symbol(void(0), "apply"), first(form), second(form)));
|
3009
|
+
};
|
3010
|
+
exports.compileApply = compileApply;
|
3011
|
+
|
3012
|
+
var compileNew = function compileNew(form) {
|
3013
|
+
return compileTemplate(list("new ~{}", compile(form)));
|
3014
|
+
};
|
3015
|
+
exports.compileNew = compileNew;
|
3016
|
+
|
3017
|
+
var compileAget = function compileAget(form) {
|
3018
|
+
var target = macroexpand(first(form));
|
3019
|
+
var attribute = macroexpand(second(form));
|
3020
|
+
var notFound = third(form);
|
3021
|
+
var template = isList(target) ?
|
3022
|
+
"(~{})[~{}]" :
|
3023
|
+
"~{}[~{}]";
|
3024
|
+
return notFound ?
|
3025
|
+
compile(list(symbol(void(0), "or"), list(symbol(void(0), "get"), first(form), second(form)), macroexpand(notFound))) :
|
3026
|
+
compileTemplate(list(template, compile(target), compile(attribute)));
|
3027
|
+
};
|
3028
|
+
exports.compileAget = compileAget;
|
3029
|
+
|
3030
|
+
var compileGet = function compileGet(form) {
|
3031
|
+
return compileAget(cons(list(symbol(void(0), "or"), first(form), 0), rest(form)));
|
3032
|
+
};
|
3033
|
+
exports.compileGet = compileGet;
|
3034
|
+
|
3035
|
+
var compileInstance = function compileInstance(form) {
|
3036
|
+
return compileTemplate(list("~{} instanceof ~{}", compile(macroexpand(second(form))), compile(macroexpand(first(form)))));
|
3037
|
+
};
|
3038
|
+
exports.compileInstance = compileInstance;
|
3039
|
+
|
3040
|
+
var compileNot = function compileNot(form) {
|
3041
|
+
return compileTemplate(list("!(~{})", compile(macroexpand(first(form)))));
|
3042
|
+
};
|
3043
|
+
exports.compileNot = compileNot;
|
3044
|
+
|
3045
|
+
var compileLoop = function compileLoop(form) {
|
3046
|
+
var bindings = (function loop(names, values, tokens) {
|
3047
|
+
var recur = loop;
|
3048
|
+
while (recur === loop) {
|
3049
|
+
recur = isEmpty(tokens) ?
|
3050
|
+
{
|
3051
|
+
"names": names,
|
3052
|
+
"values": values
|
3053
|
+
} :
|
3054
|
+
(names = conj(names, first(tokens)), values = conj(values, second(tokens)), tokens = rest(rest(tokens)), loop);
|
3055
|
+
};
|
3056
|
+
return recur;
|
3057
|
+
})([], [], first(form));
|
3058
|
+
var names = (bindings || 0)["names"];
|
3059
|
+
var values = (bindings || 0)["values"];
|
3060
|
+
var body = rest(form);
|
3061
|
+
return compile(cons(cons(symbol(void(0), "fn"), cons(symbol(void(0), "loop"), cons(names, compileRecur(names, body)))), list.apply(list, values)));
|
3062
|
+
};
|
3063
|
+
exports.compileLoop = compileLoop;
|
3064
|
+
|
3065
|
+
var rebindBindings = function rebindBindings(names, values) {
|
3066
|
+
return (function loop(result, names, values) {
|
3067
|
+
var recur = loop;
|
3068
|
+
while (recur === loop) {
|
3069
|
+
recur = isEmpty(names) ?
|
3070
|
+
reverse(result) :
|
3071
|
+
(result = cons(list(symbol(void(0), "set!"), first(names), first(values)), result), names = rest(names), values = rest(values), loop);
|
3072
|
+
};
|
3073
|
+
return recur;
|
3074
|
+
})(list(), names, values);
|
3075
|
+
};
|
3076
|
+
exports.rebindBindings = rebindBindings;
|
3077
|
+
|
3078
|
+
var expandRecur = function expandRecur(names, body) {
|
3079
|
+
return map(function(form) {
|
3080
|
+
return isList(form) ?
|
3081
|
+
isEqual(first(form), symbol(void(0), "recur")) ?
|
3082
|
+
list(symbol(void(0), "raw*"), compileGroup(concat(rebindBindings(names, rest(form)), list(symbol(void(0), "loop"))), true)) :
|
3083
|
+
expandRecur(names, form) :
|
3084
|
+
form;
|
3085
|
+
}, body);
|
3086
|
+
};
|
3087
|
+
exports.expandRecur = expandRecur;
|
3088
|
+
|
3089
|
+
var compileRecur = function compileRecur(names, body) {
|
3090
|
+
return list(list(symbol(void(0), "raw*"), compileTemplate(list("var recur = loop;\nwhile (recur === loop) {\n recur = ~{}\n}", compileStatements(expandRecur(names, body))))), symbol(void(0), "recur"));
|
3091
|
+
};
|
3092
|
+
exports.compileRecur = compileRecur;
|
3093
|
+
|
3094
|
+
var compileRaw = function compileRaw(form) {
|
3095
|
+
return first(form);
|
3096
|
+
};
|
3097
|
+
exports.compileRaw = compileRaw;
|
3098
|
+
|
3099
|
+
installSpecial(symbol(void(0), "set!"), compileSet);
|
3100
|
+
|
3101
|
+
installSpecial(symbol(void(0), "get"), compileGet);
|
3102
|
+
|
3103
|
+
installSpecial(symbol(void(0), "aget"), compileAget);
|
3104
|
+
|
3105
|
+
installSpecial(symbol(void(0), "def"), compileDef);
|
3106
|
+
|
3107
|
+
installSpecial(symbol(void(0), "if"), compileIfElse);
|
3108
|
+
|
3109
|
+
installSpecial(symbol(void(0), "do"), compileDo);
|
3110
|
+
|
3111
|
+
installSpecial(symbol(void(0), "do*"), compileStatements);
|
3112
|
+
|
3113
|
+
installSpecial(symbol(void(0), "fn"), compileFn);
|
3114
|
+
|
3115
|
+
installSpecial(symbol(void(0), "throw"), compileThrow);
|
3116
|
+
|
3117
|
+
installSpecial(symbol(void(0), "vector"), compileVector);
|
3118
|
+
|
3119
|
+
installSpecial(symbol(void(0), "try"), compileTry);
|
3120
|
+
|
3121
|
+
installSpecial(symbol(void(0), "."), compileProperty);
|
3122
|
+
|
3123
|
+
installSpecial(symbol(void(0), "apply"), compileApply);
|
3124
|
+
|
3125
|
+
installSpecial(symbol(void(0), "new"), compileNew);
|
3126
|
+
|
3127
|
+
installSpecial(symbol(void(0), "instance?"), compileInstance);
|
3128
|
+
|
3129
|
+
installSpecial(symbol(void(0), "not"), compileNot);
|
3130
|
+
|
3131
|
+
installSpecial(symbol(void(0), "loop"), compileLoop);
|
3132
|
+
|
3133
|
+
installSpecial(symbol(void(0), "raw*"), compileRaw);
|
3134
|
+
|
3135
|
+
installSpecial(symbol(void(0), "comment"), writeComment);
|
3136
|
+
|
3137
|
+
var compileRePattern = function compileRePattern(form) {
|
3138
|
+
return "" + form;
|
3139
|
+
};
|
3140
|
+
exports.compileRePattern = compileRePattern;
|
3141
|
+
|
3142
|
+
var installNative = function installNative(alias, operator, validator, fallback) {
|
3143
|
+
return installSpecial(alias, function(form) {
|
3144
|
+
return isEmpty(form) ?
|
3145
|
+
fallback :
|
3146
|
+
reduce(function(left, right) {
|
3147
|
+
return compileTemplate(list("~{} ~{} ~{}", left, name(operator), right));
|
3148
|
+
}, map(function(operand) {
|
3149
|
+
return compileTemplate(list(isList(operand) ?
|
3150
|
+
"(~{})" :
|
3151
|
+
"~{}", compile(macroexpand(operand))));
|
3152
|
+
}, form));
|
3153
|
+
}, validator);
|
3154
|
+
};
|
3155
|
+
exports.installNative = installNative;
|
3156
|
+
|
3157
|
+
var installOperator = function installOperator(alias, operator) {
|
3158
|
+
return installSpecial(alias, function(form) {
|
3159
|
+
return (function loop(result, left, right, operands) {
|
3160
|
+
var recur = loop;
|
3161
|
+
while (recur === loop) {
|
3162
|
+
recur = isEmpty(operands) ?
|
3163
|
+
"" + result + (compileTemplate(list("~{} ~{} ~{}", compile(macroexpand(left)), name(operator), compile(macroexpand(right))))) :
|
3164
|
+
(result = "" + result + (compileTemplate(list("~{} ~{} ~{} && ", compile(macroexpand(left)), name(operator), compile(macroexpand(right))))), left = right, right = first(operands), operands = rest(operands), loop);
|
3165
|
+
};
|
3166
|
+
return recur;
|
3167
|
+
})("", first(form), second(form), rest(rest(form)));
|
3168
|
+
}, verifyTwo);
|
3169
|
+
};
|
3170
|
+
exports.installOperator = installOperator;
|
3171
|
+
|
3172
|
+
var compilerError = function compilerError(form, message) {
|
3173
|
+
var error = Error("" + message);
|
3174
|
+
error.line = 1;
|
3175
|
+
return (function() { throw error; })();
|
3176
|
+
};
|
3177
|
+
exports.compilerError = compilerError;
|
3178
|
+
|
3179
|
+
var verifyTwo = function verifyTwo(form) {
|
3180
|
+
return (isEmpty(rest(form))) || (isEmpty(rest(rest(form)))) ?
|
3181
|
+
(function() { throw compilerError(form, "" + (first(form)) + " form requires at least two operands"); })() :
|
3182
|
+
void(0);
|
3183
|
+
};
|
3184
|
+
exports.verifyTwo = verifyTwo;
|
3185
|
+
|
3186
|
+
installNative(symbol(void(0), "+"), symbol(void(0), "+"), void(0), 0);
|
3187
|
+
|
3188
|
+
installNative(symbol(void(0), "-"), symbol(void(0), "-"), void(0), "NaN");
|
3189
|
+
|
3190
|
+
installNative(symbol(void(0), "*"), symbol(void(0), "*"), void(0), 1);
|
3191
|
+
|
3192
|
+
installNative(symbol(void(0), "/"), symbol(void(0), "/"), verifyTwo);
|
3193
|
+
|
3194
|
+
installNative(symbol(void(0), "mod"), symbol("%"), verifyTwo);
|
3195
|
+
|
3196
|
+
installNative(symbol(void(0), "and"), symbol(void(0), "&&"));
|
3197
|
+
|
3198
|
+
installNative(symbol(void(0), "or"), symbol(void(0), "||"));
|
3199
|
+
|
3200
|
+
installOperator(symbol(void(0), "not="), symbol(void(0), "!="));
|
3201
|
+
|
3202
|
+
installOperator(symbol(void(0), "=="), symbol(void(0), "==="));
|
3203
|
+
|
3204
|
+
installOperator(symbol(void(0), "identical?"), symbol(void(0), "==="));
|
3205
|
+
|
3206
|
+
installOperator(symbol(void(0), ">"), symbol(void(0), ">"));
|
3207
|
+
|
3208
|
+
installOperator(symbol(void(0), ">="), symbol(void(0), ">="));
|
3209
|
+
|
3210
|
+
installOperator(symbol(void(0), "<"), symbol(void(0), "<"));
|
3211
|
+
|
3212
|
+
installOperator(symbol(void(0), "<="), symbol(void(0), "<="));
|
3213
|
+
|
3214
|
+
installNative(symbol(void(0), "bit-and"), symbol(void(0), "&"), verifyTwo);
|
3215
|
+
|
3216
|
+
installNative(symbol(void(0), "bit-or"), symbol(void(0), "|"), verifyTwo);
|
3217
|
+
|
3218
|
+
installNative(symbol(void(0), "bit-xor"), symbol("^"));
|
3219
|
+
|
3220
|
+
installNative(symbol(void(0), "bit-not"), symbol("~"), verifyTwo);
|
3221
|
+
|
3222
|
+
installNative(symbol(void(0), "bit-shift-left"), symbol(void(0), "<<"), verifyTwo);
|
3223
|
+
|
3224
|
+
installNative(symbol(void(0), "bit-shift-right"), symbol(void(0), ">>"), verifyTwo);
|
3225
|
+
|
3226
|
+
installNative(symbol(void(0), "bit-shift-right-zero-fil"), symbol(void(0), ">>>"), verifyTwo);
|
3227
|
+
|
3228
|
+
installMacro(symbol(void(0), "str"), function str() {
|
3229
|
+
var forms = Array.prototype.slice.call(arguments, 0);
|
3230
|
+
return concat(list(symbol(void(0), "+"), ""), forms);
|
3231
|
+
});
|
3232
|
+
|
3233
|
+
installMacro(symbol(void(0), "let"), function letMacro(bindings) {
|
3234
|
+
var body = Array.prototype.slice.call(arguments, 1);
|
3235
|
+
return cons(symbol(void(0), "do"), concat(defineBindings(bindings), body));
|
3236
|
+
});
|
3237
|
+
|
3238
|
+
installMacro(symbol(void(0), "cond"), function cond() {
|
3239
|
+
var clauses = Array.prototype.slice.call(arguments, 0);
|
3240
|
+
return !(isEmpty(clauses)) ?
|
3241
|
+
list(symbol(void(0), "if"), first(clauses), isEmpty(rest(clauses)) ?
|
3242
|
+
(function() { throw Error("cond requires an even number of forms"); })() :
|
3243
|
+
second(clauses), cons(symbol(void(0), "cond"), rest(rest(clauses)))) :
|
3244
|
+
void(0);
|
3245
|
+
});
|
3246
|
+
|
3247
|
+
installMacro(symbol(void(0), "defn"), function defn(name) {
|
3248
|
+
var body = Array.prototype.slice.call(arguments, 1);
|
3249
|
+
return list(symbol(void(0), "def"), name, concat(list(symbol(void(0), "fn"), name), body));
|
3250
|
+
});
|
3251
|
+
|
3252
|
+
installMacro(symbol(void(0), "defn-"), function defn(name) {
|
3253
|
+
var body = Array.prototype.slice.call(arguments, 1);
|
3254
|
+
return concat(list(symbol(void(0), "defn"), withMeta(name, conj({
|
3255
|
+
"private": true
|
3256
|
+
}, meta(name)))), body);
|
3257
|
+
});
|
3258
|
+
|
3259
|
+
installMacro(symbol(void(0), "assert"), function assert(x, message) {
|
3260
|
+
var title = message || "";
|
3261
|
+
var assertion = prStr(x);
|
3262
|
+
var uri = (x || 0)["uri"];
|
3263
|
+
var form = isList(x) ?
|
3264
|
+
second(x) :
|
3265
|
+
x;
|
3266
|
+
return list(symbol(void(0), "do"), list(symbol(void(0), "if"), list(symbol(void(0), "and"), list(symbol(void(0), "not"), list(symbol(void(0), "identical?"), list(symbol(void(0), "typeof"), symbol(void(0), "**verbose**")), "undefined")), symbol(void(0), "**verbose**")), list(symbol(void(0), ".log"), symbol(void(0), "console"), "Assert:", assertion)), list(symbol(void(0), "if"), list(symbol(void(0), "not"), x), list(symbol(void(0), "throw"), list(symbol(void(0), "Error."), list(symbol(void(0), "str"), "Assert failed: ", title, "\n\nAssertion:\n\n", assertion, "\n\nActual:\n\n", form, "\n--------------\n"), uri))));
|
3267
|
+
});
|
3268
|
+
|
3269
|
+
installMacro(symbol(void(0), "import"), function(imports, path) {
|
3270
|
+
return isNil(path) ?
|
3271
|
+
list(symbol(void(0), "require"), imports) :
|
3272
|
+
isSymbol(imports) ?
|
3273
|
+
list(symbol(void(0), "def"), withMeta(imports, {
|
3274
|
+
"private": true
|
3275
|
+
}), list(symbol(void(0), "require"), path)) :
|
3276
|
+
(function loop(form, names) {
|
3277
|
+
var recur = loop;
|
3278
|
+
while (recur === loop) {
|
3279
|
+
recur = isEmpty(names) ?
|
3280
|
+
concat(list(symbol(void(0), "do*")), form) :
|
3281
|
+
(function() {
|
3282
|
+
var alias = first(names);
|
3283
|
+
var id = symbol("" + ".-" + (name(alias)));
|
3284
|
+
return (form = cons(list(symbol(void(0), "def"), withMeta(alias, {
|
3285
|
+
"private": true
|
3286
|
+
}), list(id, list(symbol(void(0), "require"), path))), form), names = rest(names), loop);
|
3287
|
+
})();
|
3288
|
+
};
|
3289
|
+
return recur;
|
3290
|
+
})(list(), imports);
|
3291
|
+
});
|
3292
|
+
|
3293
|
+
var expandNs = function expandNs(id) {
|
3294
|
+
var params = Array.prototype.slice.call(arguments, 1);
|
3295
|
+
return (function() {
|
3296
|
+
var ns = "" + id;
|
3297
|
+
var requirer = split(ns, ".");
|
3298
|
+
var doc = isString(first(params)) ?
|
3299
|
+
first(params) :
|
3300
|
+
void(0);
|
3301
|
+
var args = doc ?
|
3302
|
+
rest(params) :
|
3303
|
+
params;
|
3304
|
+
var parseReferences = function(forms) {
|
3305
|
+
return reduce(function(references, form) {
|
3306
|
+
(references || 0)[name(first(form))] = vec(rest(form));
|
3307
|
+
return references;
|
3308
|
+
}, {}, forms);
|
3309
|
+
};
|
3310
|
+
var references = parseReferences(args);
|
3311
|
+
var idToPath = function idToPath(id) {
|
3312
|
+
var requirement = split("" + id, ".");
|
3313
|
+
var isRelative = first(requirer) === first(requirement);
|
3314
|
+
return isRelative ?
|
3315
|
+
(function loop(from, to) {
|
3316
|
+
var recur = loop;
|
3317
|
+
while (recur === loop) {
|
3318
|
+
recur = first(from) === first(to) ?
|
3319
|
+
(from = rest(from), to = rest(to), loop) :
|
3320
|
+
join("/", concat(["."], repeat(dec(count(from)), ".."), to));
|
3321
|
+
};
|
3322
|
+
return recur;
|
3323
|
+
})(requirer, requirement) :
|
3324
|
+
join("/", requirement);
|
3325
|
+
};
|
3326
|
+
var makeRequire = function(from, as, name) {
|
3327
|
+
var path = idToPath(from);
|
3328
|
+
var requirement = name ?
|
3329
|
+
list(symbol(void(0), "."), list(symbol(void(0), "require"), path), symbol(void(0), "" + "-" + name)) :
|
3330
|
+
list(symbol(void(0), "require"), path);
|
3331
|
+
return as ?
|
3332
|
+
list(symbol(void(0), "def"), as, requirement) :
|
3333
|
+
requirement;
|
3334
|
+
};
|
3335
|
+
var expandRequirement = function(form) {
|
3336
|
+
var from = first(form);
|
3337
|
+
var as = ("꞉as" === second(form)) && (third(form));
|
3338
|
+
return makeRequire(from, as);
|
3339
|
+
};
|
3340
|
+
var expandUse = function(form) {
|
3341
|
+
var from = first(form);
|
3342
|
+
var directives = dictionary.apply(dictionary, vec(rest(form)));
|
3343
|
+
var names = (directives || 0)["꞉only"];
|
3344
|
+
var renames = (directives || 0)["꞉rename"];
|
3345
|
+
var namedImports = names && (map(function(name) {
|
3346
|
+
return makeRequire(from, name, name);
|
3347
|
+
}, names));
|
3348
|
+
var renamedImports = renames && (map(function(pair) {
|
3349
|
+
return makeRequire(from, second(pair), first(pair));
|
3350
|
+
}, renames));
|
3351
|
+
(function() {
|
3352
|
+
(!(typeof(__verbose__) === "undefined")) && __verbose__ ?
|
3353
|
+
console.log("Assert:", "(or names renames)") :
|
3354
|
+
void(0);
|
3355
|
+
return !(names || renames) ?
|
3356
|
+
(function() { throw new Error("" + "Assert failed: " + ("" + "Only [my.lib :only [foo bar]] form & " + "[clojure.string :rename {replace str-replace} are supported") + "\n\nAssertion:\n\n" + "(or names renames)" + "\n\nActual:\n\n" + names + "\n--------------\n", void(0)); })() :
|
3357
|
+
void(0);
|
3358
|
+
})();
|
3359
|
+
return concat([], namedImports, renamedImports);
|
3360
|
+
};
|
3361
|
+
var requireForms = (references || 0)["require"];
|
3362
|
+
var useForms = (references || 0)["use"];
|
3363
|
+
var requirements = requireForms ?
|
3364
|
+
map(expandRequirement, requireForms) :
|
3365
|
+
void(0);
|
3366
|
+
var uses = useForms ?
|
3367
|
+
concat.apply(concat, map(expandUse, useForms)) :
|
3368
|
+
void(0);
|
3369
|
+
return concat(list(symbol(void(0), "do*"), list(symbol(void(0), "def"), symbol(void(0), "*ns*"), ns), list(symbol(void(0), "set!"), list(symbol(void(0), ".-namespace"), symbol(void(0), "module")), symbol(void(0), "*ns*"))), doc ?
|
3370
|
+
[list(symbol(void(0), "set!"), list(symbol(void(0), ".-description"), symbol(void(0), "module")), doc)] :
|
3371
|
+
void(0), requirements, uses);
|
3372
|
+
})();
|
3373
|
+
};
|
3374
|
+
exports.expandNs = expandNs;
|
3375
|
+
|
3376
|
+
installMacro(symbol(void(0), "ns"), expandNs);
|
3377
|
+
|
3378
|
+
installMacro(symbol(void(0), "print"), function() {
|
3379
|
+
var more = Array.prototype.slice.call(arguments, 0);
|
3380
|
+
"Prints the object(s) to the output for human consumption.";
|
3381
|
+
return concat(list(symbol(void(0), ".log"), symbol(void(0), "console")), more);
|
3382
|
+
})
|
3383
|
+
|
3384
|
+
},{"./reader":"CX0B04","./ast":"dcWfTp","./sequence":"zNvMnP","./runtime":"+Sggh0","./string":"BIHQiq","./backend/javascript/writer":2}],"wisp/engine/browser":[function(require,module,exports){
|
3385
|
+
module.exports=require('8GaiHy');
|
3386
|
+
},{}],"8GaiHy":[function(require,module,exports){
|
3387
|
+
var str = (require("../runtime")).str;;
|
3388
|
+
|
3389
|
+
var rest = (require("../sequence")).rest;;
|
3390
|
+
|
3391
|
+
var readFromString = (require("../reader")).readFromString;;
|
3392
|
+
|
3393
|
+
var compileProgram = (require("../compiler")).compileProgram;;
|
3394
|
+
|
3395
|
+
var transpile = function transpile(source, uri) {
|
3396
|
+
return "" + (compileProgram(rest(readFromString("" + "(do " + source + ")", uri)))) + "\n";
|
3397
|
+
};
|
3398
|
+
exports.transpile = transpile;
|
3399
|
+
|
3400
|
+
var evaluate = function evaluate(code, url) {
|
3401
|
+
return eval(transpile(code, url));
|
3402
|
+
};
|
3403
|
+
exports.evaluate = evaluate;
|
3404
|
+
|
3405
|
+
var run = function run(code, url) {
|
3406
|
+
return (Function(transpile(code, url)))();
|
3407
|
+
};
|
3408
|
+
exports.run = run;
|
3409
|
+
|
3410
|
+
var load = function load(url, callback) {
|
3411
|
+
var request = window.XMLHttpRequest ?
|
3412
|
+
new XMLHttpRequest() :
|
3413
|
+
new ActiveXObject("Microsoft.XMLHTTP");
|
3414
|
+
request.open("GET", url, true);
|
3415
|
+
request.overrideMimeType ?
|
3416
|
+
request.overrideMimeType("application/wisp") :
|
3417
|
+
void(0);
|
3418
|
+
request.onreadystatechange = function() {
|
3419
|
+
return request.readyState === 4 ?
|
3420
|
+
(request.status === 0) || (request.status === 200) ?
|
3421
|
+
callback(run(request.responseText, url)) :
|
3422
|
+
callback("Could not load") :
|
3423
|
+
void(0);
|
3424
|
+
};
|
3425
|
+
return request.send(null);
|
3426
|
+
};
|
3427
|
+
exports.load = load;
|
3428
|
+
|
3429
|
+
var runScripts = function runScripts() {
|
3430
|
+
var scripts = Array.prototype.filter.call(document.getElementsByTagName("script"), function(script) {
|
3431
|
+
return script.type === "application/wisp";
|
3432
|
+
});
|
3433
|
+
var next = function next() {
|
3434
|
+
return scripts.length ?
|
3435
|
+
(function() {
|
3436
|
+
var script = scripts.shift();
|
3437
|
+
return script.src ?
|
3438
|
+
load(script.src, next) :
|
3439
|
+
next(run(script.innerHTML));
|
3440
|
+
})() :
|
3441
|
+
void(0);
|
3442
|
+
};
|
3443
|
+
return next();
|
3444
|
+
};
|
3445
|
+
exports.runScripts = runScripts;
|
3446
|
+
|
3447
|
+
(document.readyState === "complete") || (document.readyState === "interactive") ?
|
3448
|
+
runScripts() :
|
3449
|
+
window.addEventListener ?
|
3450
|
+
window.addEventListener("DOMContentLoaded", runScripts, false) :
|
3451
|
+
window.attachEvent("onload", runScripts)
|
3452
|
+
|
3453
|
+
},{"../runtime":"+Sggh0","../sequence":"zNvMnP","../reader":"CX0B04","../compiler":"/EiAl9"}],2:[function(require,module,exports){
|
3454
|
+
var isKeyword = (require("../../ast")).isKeyword;
|
3455
|
+
var isSymbol = (require("../../ast")).isSymbol;
|
3456
|
+
var symbol = (require("../../ast")).symbol;
|
3457
|
+
var namespace = (require("../../ast")).namespace;
|
3458
|
+
var name = (require("../../ast")).name;;
|
3459
|
+
|
3460
|
+
var isEmpty = (require("../../sequence")).isEmpty;
|
3461
|
+
var reduce = (require("../../sequence")).reduce;
|
3462
|
+
var last = (require("../../sequence")).last;
|
3463
|
+
var count = (require("../../sequence")).count;
|
3464
|
+
var map = (require("../../sequence")).map;
|
3465
|
+
var vec = (require("../../sequence")).vec;
|
3466
|
+
var isList = (require("../../sequence")).isList;
|
3467
|
+
var rest = (require("../../sequence")).rest;
|
3468
|
+
var first = (require("../../sequence")).first;
|
3469
|
+
var list = (require("../../sequence")).list;;
|
3470
|
+
|
3471
|
+
var subs = (require("../../runtime")).subs;
|
3472
|
+
var dec = (require("../../runtime")).dec;
|
3473
|
+
var reFind = (require("../../runtime")).reFind;
|
3474
|
+
var isRePattern = (require("../../runtime")).isRePattern;
|
3475
|
+
var isBoolean = (require("../../runtime")).isBoolean;
|
3476
|
+
var isDictionary = (require("../../runtime")).isDictionary;
|
3477
|
+
var isVector = (require("../../runtime")).isVector;
|
3478
|
+
var isNumber = (require("../../runtime")).isNumber;
|
3479
|
+
var isString = (require("../../runtime")).isString;
|
3480
|
+
var isNil = (require("../../runtime")).isNil;
|
3481
|
+
var isTrue = (require("../../runtime")).isTrue;;
|
3482
|
+
|
3483
|
+
var upperCase = (require("../../string")).upperCase;
|
3484
|
+
var split = (require("../../string")).split;
|
3485
|
+
var join = (require("../../string")).join;
|
3486
|
+
var replace = (require("../../string")).replace;;
|
3487
|
+
|
3488
|
+
var writeReference = function writeReference(form) {
|
3489
|
+
"Translates references from clojure convention to JS:\n\n **macros** __macros__\n list->vector listToVector\n set! set\n foo_bar foo_bar\n number? isNumber\n create-server createServer";
|
3490
|
+
return (function() {
|
3491
|
+
var id = name(form);
|
3492
|
+
id = id === "*" ?
|
3493
|
+
"multiply" :
|
3494
|
+
id === "/" ?
|
3495
|
+
"divide" :
|
3496
|
+
id === "+" ?
|
3497
|
+
"sum" :
|
3498
|
+
id === "-" ?
|
3499
|
+
"subtract" :
|
3500
|
+
id === "=" ?
|
3501
|
+
"equal?" :
|
3502
|
+
id === "==" ?
|
3503
|
+
"strict-equal?" :
|
3504
|
+
id === "<=" ?
|
3505
|
+
"not-greater-than" :
|
3506
|
+
id === ">=" ?
|
3507
|
+
"not-less-than" :
|
3508
|
+
id === ">" ?
|
3509
|
+
"greater-than" :
|
3510
|
+
id === "<" ?
|
3511
|
+
"less-than" :
|
3512
|
+
"else" ?
|
3513
|
+
id :
|
3514
|
+
void(0);
|
3515
|
+
id = join("_", split(id, "*"));
|
3516
|
+
id = join("-to-", split(id, "->"));
|
3517
|
+
id = join(split(id, "!"));
|
3518
|
+
id = join("$", split(id, "%"));
|
3519
|
+
id = join("-plus-", split(id, "+"));
|
3520
|
+
id = join("-and-", split(id, "&"));
|
3521
|
+
id = last(id) === "?" ?
|
3522
|
+
"" + "is-" + (subs(id, 0, dec(count(id)))) :
|
3523
|
+
id;
|
3524
|
+
id = reduce(function(result, key) {
|
3525
|
+
return "" + result + ((!(isEmpty(result))) && (!(isEmpty(key))) ?
|
3526
|
+
"" + (upperCase((key || 0)[0])) + (subs(key, 1)) :
|
3527
|
+
key);
|
3528
|
+
}, "", split(id, "-"));
|
3529
|
+
return id;
|
3530
|
+
})();
|
3531
|
+
};
|
3532
|
+
exports.writeReference = writeReference;
|
3533
|
+
|
3534
|
+
var writeKeywordReference = function writeKeywordReference(form) {
|
3535
|
+
return "" + "\"" + (name(form)) + "\"";
|
3536
|
+
};
|
3537
|
+
exports.writeKeywordReference = writeKeywordReference;
|
3538
|
+
|
3539
|
+
var writeKeyword = function writeKeyword(form) {
|
3540
|
+
return "" + "\"" + "꞉" + (name(form)) + "\"";
|
3541
|
+
};
|
3542
|
+
exports.writeKeyword = writeKeyword;
|
3543
|
+
|
3544
|
+
var writeSymbol = function writeSymbol(form) {
|
3545
|
+
return write(list(symbol(void(0), "symbol"), namespace(form), name(form)));
|
3546
|
+
};
|
3547
|
+
exports.writeSymbol = writeSymbol;
|
3548
|
+
|
3549
|
+
var writeNil = function writeNil(form) {
|
3550
|
+
return "void(0)";
|
3551
|
+
};
|
3552
|
+
exports.writeNil = writeNil;
|
3553
|
+
|
3554
|
+
var writeNumber = function writeNumber(form) {
|
3555
|
+
return form;
|
3556
|
+
};
|
3557
|
+
exports.writeNumber = writeNumber;
|
3558
|
+
|
3559
|
+
var writeBoolean = function writeBoolean(form) {
|
3560
|
+
return isTrue(form) ?
|
3561
|
+
"true" :
|
3562
|
+
"false";
|
3563
|
+
};
|
3564
|
+
exports.writeBoolean = writeBoolean;
|
3565
|
+
|
3566
|
+
var writeString = function writeString(form) {
|
3567
|
+
form = replace(form, RegExp("\\\\", "g"), "\\\\");
|
3568
|
+
form = replace(form, RegExp("\n", "g"), "\\n");
|
3569
|
+
form = replace(form, RegExp("\r", "g"), "\\r");
|
3570
|
+
form = replace(form, RegExp("\t", "g"), "\\t");
|
3571
|
+
form = replace(form, RegExp("\"", "g"), "\\\"");
|
3572
|
+
return "" + "\"" + form + "\"";
|
3573
|
+
};
|
3574
|
+
exports.writeString = writeString;
|
3575
|
+
|
3576
|
+
var writeTemplate = function writeTemplate() {
|
3577
|
+
var form = Array.prototype.slice.call(arguments, 0);
|
3578
|
+
return (function() {
|
3579
|
+
var indentPattern = /\n *$/;
|
3580
|
+
var lineBreakPatter = RegExp("\n", "g");
|
3581
|
+
var getIndentation = function(code) {
|
3582
|
+
return (reFind(indentPattern, code)) || "\n";
|
3583
|
+
};
|
3584
|
+
return (function loop(code, parts, values) {
|
3585
|
+
var recur = loop;
|
3586
|
+
while (recur === loop) {
|
3587
|
+
recur = count(parts) > 1 ?
|
3588
|
+
(code = "" + code + (first(parts)) + (replace("" + "" + (first(values)), lineBreakPatter, getIndentation(first(parts)))), parts = rest(parts), values = rest(values), loop) :
|
3589
|
+
"" + code + (first(parts));
|
3590
|
+
};
|
3591
|
+
return recur;
|
3592
|
+
})("", split(first(form), "~{}"), rest(form));
|
3593
|
+
})();
|
3594
|
+
};
|
3595
|
+
exports.writeTemplate = writeTemplate;
|
3596
|
+
|
3597
|
+
var writeGroup = function writeGroup() {
|
3598
|
+
var forms = Array.prototype.slice.call(arguments, 0);
|
3599
|
+
return join(", ", forms);
|
3600
|
+
};
|
3601
|
+
exports.writeGroup = writeGroup;
|
3602
|
+
|
3603
|
+
var writeInvoke = function writeInvoke(callee) {
|
3604
|
+
var params = Array.prototype.slice.call(arguments, 1);
|
3605
|
+
return writeTemplate("~{}(~{})", callee, writeGroup.apply(writeGroup, params));
|
3606
|
+
};
|
3607
|
+
exports.writeInvoke = writeInvoke;
|
3608
|
+
|
3609
|
+
var writeError = function writeError(message) {
|
3610
|
+
return function() {
|
3611
|
+
return (function() { throw Error(message); })();
|
3612
|
+
};
|
3613
|
+
};
|
3614
|
+
exports.writeError = writeError;
|
3615
|
+
|
3616
|
+
var writeVector = writeError("Vectors are not supported");
|
3617
|
+
exports.writeVector = writeVector;
|
3618
|
+
|
3619
|
+
var writeDictionary = writeError("Dictionaries are not supported");
|
3620
|
+
exports.writeDictionary = writeDictionary;
|
3621
|
+
|
3622
|
+
var writePattern = writeError("Regular expressions are not supported");
|
3623
|
+
exports.writePattern = writePattern;
|
3624
|
+
|
3625
|
+
var compileComment = function compileComment(form) {
|
3626
|
+
return compileTemplate(list("//~{}\n", first(form)));
|
3627
|
+
};
|
3628
|
+
exports.compileComment = compileComment;
|
3629
|
+
|
3630
|
+
var writeDef = function writeDef(form) {
|
3631
|
+
var id = first(form);
|
3632
|
+
var isExport = ((((meta(form)) || {}) || 0)["top"]) && (!((((meta(id)) || {}) || 0)["private"]));
|
3633
|
+
var attribute = symbol(namespace(id), "" + "-" + (name(id)));
|
3634
|
+
return isExport ?
|
3635
|
+
compileTemplate(list("var ~{};\n~{}", compile(cons(symbol(void(0), "set!"), form)), compile(list(symbol(void(0), "set!"), list(symbol(void(0), "."), symbol(void(0), "exports"), attribute), id)))) :
|
3636
|
+
compileTemplate(list("var ~{}", compile(cons(symbol(void(0), "set!"), form))));
|
3637
|
+
};
|
3638
|
+
exports.writeDef = writeDef;
|
3639
|
+
|
3640
|
+
var write = function write(form) {
|
3641
|
+
return isNil(form) ?
|
3642
|
+
writeNil(form) :
|
3643
|
+
isSymbol(form) ?
|
3644
|
+
writeReference(form) :
|
3645
|
+
isKeyword(form) ?
|
3646
|
+
writeKeywordReference(form) :
|
3647
|
+
isString(form) ?
|
3648
|
+
writeString(form) :
|
3649
|
+
isNumber(form) ?
|
3650
|
+
writeNumber(form) :
|
3651
|
+
isBoolean(form) ?
|
3652
|
+
writeBoolean(form) :
|
3653
|
+
isRePattern(form) ?
|
3654
|
+
writePattern(form) :
|
3655
|
+
isVector(form) ?
|
3656
|
+
writeVector(form) :
|
3657
|
+
isDictionary(form) ?
|
3658
|
+
writeDictionary() :
|
3659
|
+
isList(form) ?
|
3660
|
+
writeInvoke.apply(writeInvoke, map(write, vec(form))) :
|
3661
|
+
"else" ?
|
3662
|
+
writeError("Unsupported form") :
|
3663
|
+
void(0);
|
3664
|
+
};
|
3665
|
+
exports.write = write
|
3666
|
+
|
3667
|
+
},{"../../ast":"dcWfTp","../../sequence":"zNvMnP","../../runtime":"+Sggh0","../../string":"BIHQiq"}]},{},[1])
|
3668
|
+
//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlcyI6WyIvVXNlcnMvZ296YWxhL1Byb2plY3RzL3dpc3Avc3VwcG9ydC9lbWJlZC5qcyIsIi9Vc2Vycy9nb3phbGEvUHJvamVjdHMvd2lzcC9ydW50aW1lLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL3NlcXVlbmNlLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL3N0cmluZy5qcyIsIi9Vc2Vycy9nb3phbGEvUHJvamVjdHMvd2lzcC9yZWFkZXIuanMiLCIvVXNlcnMvZ296YWxhL1Byb2plY3RzL3dpc3AvYXN0LmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL2NvbXBpbGVyLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL2VuZ2luZS9icm93c2VyLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbG1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDemlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN0TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcGdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbInZhciByZXN0ID0gKHJlcXVpcmUoXCJ3aXNwL3NlcXVlbmNlXCIpKS5yZXN0OztcblxudmFyIHN0ciA9IChyZXF1aXJlKFwid2lzcC9ydW50aW1lXCIpKS5zdHI7O1xuXG52YXIgdHJhbnNwaWxlID0gKHJlcXVpcmUoXCJ3aXNwL2VuZ2luZS9icm93c2VyXCIpKS50cmFuc3BpbGU7O1xuXG52YXIgcmVhZEZyb21TdHJpbmcgPSAocmVxdWlyZShcIndpc3AvcmVhZGVyXCIpKS5yZWFkRnJvbVN0cmluZzs7XG5cbnZhciBjb21waWxlUHJvZ3JhbSA9IChyZXF1aXJlKFwid2lzcC9jb21waWxlclwiKSkuY29tcGlsZVByb2dyYW07O1xuXG52YXIgdXBkYXRlUHJldmlldyA9IGZ1bmN0aW9uIHVwZGF0ZVByZXZpZXcoZWRpdG9yKSB7XG4gIGNsZWFyVGltZW91dCh1cGRhdGVQcmV2aWV3LmlkKTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHtcbiAgICB2YXIgY29kZSA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuICAgIGxvY2FsU3RvcmFnZS5idWZmZXIgPSBjb2RlO1xuICAgIHJldHVybiB1cGRhdGVQcmV2aWV3LmlkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBlZGl0b3IuY2xlYXJNYXJrZXIodXBkYXRlUHJldmlldy5saW5lIHx8IDEpO1xuICAgICAgICByZXR1cm4gb3V0cHV0LnNldFZhbHVlKHRyYW5zcGlsZShjb2RlKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB1cGRhdGVQcmV2aWV3LmxpbmUgPSBlcnJvci5saW5lO1xuICAgICAgICByZXR1cm4gZWRpdG9yLnNldE1hcmtlcihlcnJvci5saW5lIHx8IDAsIFwiXCIgKyBcIjxzcGFuIHRpdGxlPSdcIiArIGVycm9yLm1lc3NhZ2UgKyBcIic+4pePPC9zcGFuPiAlTiVcIik7XG4gICAgICB9fSkoKTtcbiAgICB9LCAyMDApO1xuICB9KSgpO1xufTtcbmV4cG9ydHMudXBkYXRlUHJldmlldyA9IHVwZGF0ZVByZXZpZXc7XG5cbnZhciBpbnB1dCA9IENvZGVNaXJyb3IoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbnB1dFwiKSwge1xuICBcImxpbmVOdW1iZXJzXCI6IHRydWUsXG4gIFwiYXV0b0NsZWFyRW1wdHlMaW5lc1wiOiB0cnVlLFxuICBcInRhYlNpemVcIjogMixcbiAgXCJpbmRlbnRXaXRoVGFic1wiOiBmYWxzZSxcbiAgXCJlbGVjdHJpY0NoYXJzXCI6IHRydWUsXG4gIFwibW9kZVwiOiBcImNsb2p1cmVcIixcbiAgXCJ0aGVtZVwiOiBcImFtYmlhbmNlXCIsXG4gIFwiYXV0b2ZvY3VzXCI6IHRydWUsXG4gIFwiZml4ZWRHdXR0ZXJcIjogdHJ1ZSxcbiAgXCJtYXRjaEJyYWNrZXRzXCI6IHRydWUsXG4gIFwidmFsdWVcIjogbG9jYWxTdG9yYWdlLmJ1ZmZlciB8fCAoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhhbXBsZXNcIikpLmlubmVySFRNTCksXG4gIFwib25DaGFuZ2VcIjogdXBkYXRlUHJldmlldyxcbiAgXCJvbkN1cnNvckFjdGl2aXR5XCI6IGZ1bmN0aW9uKCkge1xuICAgIGlucHV0LnNldExpbmVDbGFzcyhobExpbmUsIG51bGwsIG51bGwpO1xuICAgIHJldHVybiBobExpbmUgPSBpbnB1dC5zZXRMaW5lQ2xhc3MoKGlucHV0LmdldEN1cnNvcigpKS5saW5lLCBudWxsLCBcImFjdGl2ZWxpbmVcIik7XG4gIH0sXG4gIFwib25HdXR0ZXJDbGlja1wiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJvdXRwdXRcIik7XG4gICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbnB1dFwiKTtcbiAgICBvdXRwdXQuaGlkZGVuID0gIShvdXRwdXQuaGlkZGVuKTtcbiAgICByZXR1cm4gaW5wdXQuc3R5bGUud2lkdGggPSBvdXRwdXQuaGlkZGVuID9cbiAgICAgIFwiMTAwJVwiIDpcbiAgICAgIFwiNTAlXCI7XG4gIH1cbn0pO1xuZXhwb3J0cy5pbnB1dCA9IGlucHV0O1xuXG52YXIgaGxMaW5lID0gaW5wdXQuc2V0TGluZUNsYXNzKDAsIHZvaWQoMCksIFwiYWN0aXZlbGluZVwiKTtcbmV4cG9ydHMuaGxMaW5lID0gaGxMaW5lO1xuXG52YXIgb3V0cHV0ID0gQ29kZU1pcnJvcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm91dHB1dFwiKSwge1xuICBcImxpbmVOdW1iZXJzXCI6IHRydWUsXG4gIFwiZml4ZWRHdXR0ZXJcIjogdHJ1ZSxcbiAgXCJtYXRjaEJyYWNrZXRzXCI6IHRydWUsXG4gIFwibW9kZVwiOiBcImphdmFzY3JpcHRcIixcbiAgXCJ0aGVtZVwiOiBcImFtYmlhbmNlXCIsXG4gIFwicmVhZE9ubHlcIjogdHJ1ZVxufSk7XG5leHBvcnRzLm91dHB1dCA9IG91dHB1dDtcblxuc2V0VGltZW91dCh1cGRhdGVQcmV2aWV3LCAxMDAwLCBpbnB1dClcbiIsIihmdW5jdGlvbigpe3ZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgcmV0dXJuIHg7XG59O1xuZXhwb3J0cy5pZGVudGl0eSA9IGlkZW50aXR5O1xuXG52YXIgaXNPZGQgPSBmdW5jdGlvbiBpc09kZChuKSB7XG4gIHJldHVybiBuICUgMiA9PT0gMTtcbn07XG5leHBvcnRzLmlzT2RkID0gaXNPZGQ7XG5cbnZhciBpc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4obikge1xuICByZXR1cm4gbiAlIDIgPT09IDA7XG59O1xuZXhwb3J0cy5pc0V2ZW4gPSBpc0V2ZW47XG5cbnZhciBpc0RpY3Rpb25hcnkgPSBmdW5jdGlvbiBpc0RpY3Rpb25hcnkoZm9ybSkge1xuICByZXR1cm4gKGlzT2JqZWN0KGZvcm0pKSAmJiAoaXNPYmplY3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKGZvcm0pKSkgJiYgKGlzTmlsKE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZm9ybSkpKSk7XG59O1xuZXhwb3J0cy5pc0RpY3Rpb25hcnkgPSBpc0RpY3Rpb25hcnk7XG5cbnZhciBkaWN0aW9uYXJ5ID0gZnVuY3Rpb24gZGljdGlvbmFyeSgpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKGtleVZhbHVlcywgcmVzdWx0KSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0ga2V5VmFsdWVzLmxlbmd0aCA/XG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIChyZXN1bHQgfHwgMClbKGtleVZhbHVlcyB8fCAwKVswXV0gPSAoa2V5VmFsdWVzIHx8IDApWzFdO1xuICAgICAgICByZXR1cm4gKGtleVZhbHVlcyA9IGtleVZhbHVlcy5zbGljZSgyKSwgcmVzdWx0ID0gcmVzdWx0LCBsb29wKTtcbiAgICAgIH0pKCkgOlxuICAgICAgcmVzdWx0O1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLCB7fSk7XG59O1xuZXhwb3J0cy5kaWN0aW9uYXJ5ID0gZGljdGlvbmFyeTtcblxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKGRpY3Rpb25hcnkpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRpY3Rpb25hcnkpO1xufTtcbmV4cG9ydHMua2V5cyA9IGtleXM7XG5cbnZhciB2YWxzID0gZnVuY3Rpb24gdmFscyhkaWN0aW9uYXJ5KSB7XG4gIHJldHVybiBrZXlzKGRpY3Rpb25hcnkpLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gKGRpY3Rpb25hcnkgfHwgMClba2V5XTtcbiAgfSk7XG59O1xuZXhwb3J0cy52YWxzID0gdmFscztcblxudmFyIGtleVZhbHVlcyA9IGZ1bmN0aW9uIGtleVZhbHVlcyhkaWN0aW9uYXJ5KSB7XG4gIHJldHVybiBrZXlzKGRpY3Rpb25hcnkpLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gW2tleSwgKGRpY3Rpb25hcnkgfHwgMClba2V5XV07XG4gIH0pO1xufTtcbmV4cG9ydHMua2V5VmFsdWVzID0ga2V5VmFsdWVzO1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSgpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24oZGVzY3JpcHRvciwgZGljdGlvbmFyeSkge1xuICAgIGlzT2JqZWN0KGRpY3Rpb25hcnkpID9cbiAgICAgIE9iamVjdC5rZXlzKGRpY3Rpb25hcnkpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiAoZGVzY3JpcHRvciB8fCAwKVtrZXldID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkaWN0aW9uYXJ5LCBrZXkpO1xuICAgICAgfSkgOlxuICAgICAgdm9pZCgwKTtcbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfSwgT2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlKSkpO1xufTtcbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcblxudmFyIGlzQ29udGFpbnNWZWN0b3IgPSBmdW5jdGlvbiBpc0NvbnRhaW5zVmVjdG9yKHZlY3RvciwgZWxlbWVudCkge1xuICByZXR1cm4gdmVjdG9yLmluZGV4T2YoZWxlbWVudCkgPj0gMDtcbn07XG5leHBvcnRzLmlzQ29udGFpbnNWZWN0b3IgPSBpc0NvbnRhaW5zVmVjdG9yO1xuXG52YXIgbWFwRGljdGlvbmFyeSA9IGZ1bmN0aW9uIG1hcERpY3Rpb25hcnkoc291cmNlLCBmKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbih0YXJnZXQsIGtleSkge1xuICAgICh0YXJnZXQgfHwgMClba2V5XSA9IGYoKHNvdXJjZSB8fCAwKVtrZXldKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9LCB7fSk7XG59O1xuZXhwb3J0cy5tYXBEaWN0aW9uYXJ5ID0gbWFwRGljdGlvbmFyeTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmV4cG9ydHMudG9TdHJpbmcgPSB0b1N0cmluZztcblxudmFyIGlzRm4gPSB0eXBlb2YoLy4vKSA9PT0gXCJmdW5jdGlvblwiID9cbiAgZnVuY3Rpb24gaXNGbih4KSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoeCkgPT09IFwiW29iamVjdCBGdW5jdGlvbl1cIjtcbiAgfSA6XG4gIGZ1bmN0aW9uIGlzRm4oeCkge1xuICAgIHJldHVybiB0eXBlb2YoeCkgPT09IFwiZnVuY3Rpb25cIjtcbiAgfTtcbmV4cG9ydHMuaXNGbiA9IGlzRm47XG5cbnZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHgpIHtcbiAgcmV0dXJuICh0eXBlb2YoeCkgPT09IFwic3RyaW5nXCIpIHx8ICh0b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgU3RyaW5nXVwiKTtcbn07XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbnZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuICh0eXBlb2YoeCkgPT09IFwibnVtYmVyXCIpIHx8ICh0b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgTnVtYmVyXVwiKTtcbn07XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbnZhciBpc1ZlY3RvciA9IGlzRm4oQXJyYXkuaXNBcnJheSkgP1xuICBBcnJheS5pc0FycmF5IDpcbiAgZnVuY3Rpb24gaXNWZWN0b3IoeCkge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgQXJyYXldXCI7XG4gIH07XG5leHBvcnRzLmlzVmVjdG9yID0gaXNWZWN0b3I7XG5cbnZhciBpc0RhdGUgPSBmdW5jdGlvbiBpc0RhdGUoeCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG59O1xuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbnZhciBpc0Jvb2xlYW4gPSBmdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xuICByZXR1cm4gKHggPT09IHRydWUpIHx8ICh4ID09PSBmYWxzZSkgfHwgKHRvU3RyaW5nLmNhbGwoeCkgPT09IFwiW29iamVjdCBCb29sZWFuXVwiKTtcbn07XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxudmFyIGlzUmVQYXR0ZXJuID0gZnVuY3Rpb24gaXNSZVBhdHRlcm4oeCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn07XG5leHBvcnRzLmlzUmVQYXR0ZXJuID0gaXNSZVBhdHRlcm47XG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgcmV0dXJuIHggJiYgKHR5cGVvZih4KSA9PT0gXCJvYmplY3RcIik7XG59O1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG52YXIgaXNOaWwgPSBmdW5jdGlvbiBpc05pbCh4KSB7XG4gIHJldHVybiAoeCA9PT0gdm9pZCgwKSkgfHwgKHggPT09IG51bGwpO1xufTtcbmV4cG9ydHMuaXNOaWwgPSBpc05pbDtcblxudmFyIGlzVHJ1ZSA9IGZ1bmN0aW9uIGlzVHJ1ZSh4KSB7XG4gIHJldHVybiB4ID09PSB0cnVlO1xufTtcbmV4cG9ydHMuaXNUcnVlID0gaXNUcnVlO1xuXG52YXIgaXNGYWxzZSA9IGZ1bmN0aW9uIGlzRmFsc2UoeCkge1xuICByZXR1cm4geCA9PT0gdHJ1ZTtcbn07XG5leHBvcnRzLmlzRmFsc2UgPSBpc0ZhbHNlO1xuXG52YXIgcmVGaW5kID0gZnVuY3Rpb24gcmVGaW5kKHJlLCBzKSB7XG4gIHZhciBtYXRjaGVzID0gcmUuZXhlYyhzKTtcbiAgcmV0dXJuICEoaXNOaWwobWF0Y2hlcykpID9cbiAgICBtYXRjaGVzLmxlbmd0aCA9PT0gMSA/XG4gICAgICAobWF0Y2hlcyB8fCAwKVswXSA6XG4gICAgICBtYXRjaGVzIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMucmVGaW5kID0gcmVGaW5kO1xuXG52YXIgcmVNYXRjaGVzID0gZnVuY3Rpb24gcmVNYXRjaGVzKHBhdHRlcm4sIHNvdXJjZSkge1xuICB2YXIgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhzb3VyY2UpO1xuICByZXR1cm4gKCEoaXNOaWwobWF0Y2hlcykpKSAmJiAoKG1hdGNoZXMgfHwgMClbMF0gPT09IHNvdXJjZSkgP1xuICAgIG1hdGNoZXMubGVuZ3RoID09PSAxID9cbiAgICAgIChtYXRjaGVzIHx8IDApWzBdIDpcbiAgICAgIG1hdGNoZXMgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5yZU1hdGNoZXMgPSByZU1hdGNoZXM7XG5cbnZhciByZVBhdHRlcm4gPSBmdW5jdGlvbiByZVBhdHRlcm4ocykge1xuICB2YXIgbWF0Y2ggPSByZUZpbmQoL14oPzpcXChcXD8oW2lkbXN1eF0qKVxcKSk/KC4qKS8sIHMpO1xuICByZXR1cm4gbmV3IFJlZ0V4cCgobWF0Y2ggfHwgMClbMl0sIChtYXRjaCB8fCAwKVsxXSk7XG59O1xuZXhwb3J0cy5yZVBhdHRlcm4gPSByZVBhdHRlcm47XG5cbnZhciBpbmMgPSBmdW5jdGlvbiBpbmMoeCkge1xuICByZXR1cm4geCArIDE7XG59O1xuZXhwb3J0cy5pbmMgPSBpbmM7XG5cbnZhciBkZWMgPSBmdW5jdGlvbiBkZWMoeCkge1xuICByZXR1cm4geCAtIDE7XG59O1xuZXhwb3J0cy5kZWMgPSBkZWM7XG5cbnZhciBzdHIgPSBmdW5jdGlvbiBzdHIoKSB7XG4gIHJldHVybiBTdHJpbmcucHJvdG90eXBlLmNvbmNhdC5hcHBseShcIlwiLCBhcmd1bWVudHMpO1xufTtcbmV4cG9ydHMuc3RyID0gc3RyO1xuXG52YXIgY2hhciA9IGZ1bmN0aW9uIGNoYXIoY29kZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbn07XG5leHBvcnRzLmNoYXIgPSBjaGFyO1xuXG52YXIgaW50ID0gZnVuY3Rpb24gaW50KHgpIHtcbiAgcmV0dXJuIGlzTnVtYmVyKHgpID9cbiAgICB4ID49IDAgP1xuICAgICAgTWF0aC5mbG9vcih4KSA6XG4gICAgICBNYXRoLmZsb29yKHgpIDpcbiAgICB4LmNoYXJDb2RlQXQoMCk7XG59O1xuZXhwb3J0cy5pbnQgPSBpbnQ7XG5cbnZhciBzdWJzID0gZnVuY3Rpb24gc3VicyhzdHJpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG59O1xuZXhwb3J0cy5zdWJzID0gc3VicztcblxudmFyIGlzUGF0dGVybkVxdWFsID0gZnVuY3Rpb24gaXNQYXR0ZXJuRXF1YWwoeCwgeSkge1xuICByZXR1cm4gKGlzUmVQYXR0ZXJuKHgpKSAmJiAoaXNSZVBhdHRlcm4oeSkpICYmICh4LnNvdXJjZSA9PT0geS5zb3VyY2UpICYmICh4Lmdsb2JhbCA9PT0geS5nbG9iYWwpICYmICh4Lm11bHRpbGluZSA9PT0geS5tdWx0aWxpbmUpICYmICh4Lmlnbm9yZUNhc2UgPT09IHkuaWdub3JlQ2FzZSk7XG59O1xuXG52YXIgaXNEYXRlRXF1YWwgPSBmdW5jdGlvbiBpc0RhdGVFcXVhbCh4LCB5KSB7XG4gIHJldHVybiAoaXNEYXRlKHgpKSAmJiAoaXNEYXRlKHkpKSAmJiAoTnVtYmVyKHgpID09PSBOdW1iZXIoeSkpO1xufTtcblxudmFyIGlzRGljdGlvbmFyeUVxdWFsID0gZnVuY3Rpb24gaXNEaWN0aW9uYXJ5RXF1YWwoeCwgeSkge1xuICByZXR1cm4gKGlzT2JqZWN0KHgpKSAmJiAoaXNPYmplY3QoeSkpICYmICgoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHhLZXlzID0ga2V5cyh4KTtcbiAgICB2YXIgeUtleXMgPSBrZXlzKHkpO1xuICAgIHZhciB4Q291bnQgPSB4S2V5cy5sZW5ndGg7XG4gICAgdmFyIHlDb3VudCA9IHlLZXlzLmxlbmd0aDtcbiAgICByZXR1cm4gKHhDb3VudCA9PT0geUNvdW50KSAmJiAoKGZ1bmN0aW9uIGxvb3AoaW5kZXgsIGNvdW50LCBrZXlzKSB7XG4gICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgIHJlY3VyID0gaW5kZXggPCBjb3VudCA/XG4gICAgICAgIGlzRXF1aXZhbGVudCgoeCB8fCAwKVsoa2V5cyB8fCAwKVtpbmRleF1dLCAoeSB8fCAwKVsoa2V5cyB8fCAwKVtpbmRleF1dKSA/XG4gICAgICAgICAgKGluZGV4ID0gaW5jKGluZGV4KSwgY291bnQgPSBjb3VudCwga2V5cyA9IGtleXMsIGxvb3ApIDpcbiAgICAgICAgICBmYWxzZSA6XG4gICAgICAgIHRydWU7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlY3VyO1xuICAgIH0pKDAsIHhDb3VudCwgeEtleXMpKTtcbiAgfSkoKSk7XG59O1xuXG52YXIgaXNWZWN0b3JFcXVhbCA9IGZ1bmN0aW9uIGlzVmVjdG9yRXF1YWwoeCwgeSkge1xuICByZXR1cm4gKGlzVmVjdG9yKHgpKSAmJiAoaXNWZWN0b3IoeSkpICYmICh4Lmxlbmd0aCA9PT0geS5sZW5ndGgpICYmICgoZnVuY3Rpb24gbG9vcCh4cywgeXMsIGluZGV4LCBjb3VudCkge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGluZGV4IDwgY291bnQgP1xuICAgICAgaXNFcXVpdmFsZW50KCh4cyB8fCAwKVtpbmRleF0sICh5cyB8fCAwKVtpbmRleF0pID9cbiAgICAgICAgKHhzID0geHMsIHlzID0geXMsIGluZGV4ID0gaW5jKGluZGV4KSwgY291bnQgPSBjb3VudCwgbG9vcCkgOlxuICAgICAgICBmYWxzZSA6XG4gICAgICB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KSh4LCB5LCAwLCB4Lmxlbmd0aCkpO1xufTtcblxudmFyIGlzRXF1aXZhbGVudCA9IGZ1bmN0aW9uIGlzRXF1aXZhbGVudCh4LCB5KSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAoeCA9PT0geSkgfHwgKGlzTmlsKHgpID9cbiAgICAgICAgaXNOaWwoeSkgOlxuICAgICAgaXNOaWwoeSkgP1xuICAgICAgICBpc05pbCh4KSA6XG4gICAgICBpc1N0cmluZyh4KSA/XG4gICAgICAgIGZhbHNlIDpcbiAgICAgIGlzTnVtYmVyKHgpID9cbiAgICAgICAgZmFsc2UgOlxuICAgICAgaXNGbih4KSA/XG4gICAgICAgIGZhbHNlIDpcbiAgICAgIGlzQm9vbGVhbih4KSA/XG4gICAgICAgIGZhbHNlIDpcbiAgICAgIGlzRGF0ZSh4KSA/XG4gICAgICAgIGlzRGF0ZUVxdWFsKHgsIHkpIDpcbiAgICAgIGlzVmVjdG9yKHgpID9cbiAgICAgICAgaXNWZWN0b3JFcXVhbCh4LCB5LCBbXSwgW10pIDpcbiAgICAgIGlzUmVQYXR0ZXJuKHgpID9cbiAgICAgICAgaXNQYXR0ZXJuRXF1YWwoeCwgeSkgOlxuICAgICAgXCJlbHNlXCIgP1xuICAgICAgICBpc0RpY3Rpb25hcnlFcXVhbCh4LCB5KSA6XG4gICAgICAgIHZvaWQoMCkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgIHJldHVybiAoZnVuY3Rpb24gbG9vcChwcmV2aW91cywgY3VycmVudCwgaW5kZXgsIGNvdW50KSB7XG4gICAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICAgIHJlY3VyID0gKGlzRXF1aXZhbGVudChwcmV2aW91cywgY3VycmVudCkpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5cbnZhciBpc0VxdWFsID0gaXNFcXVpdmFsZW50O1xuZXhwb3J0cy5pc0VxdWFsID0gaXNFcXVhbDtcblxudmFyIGlzU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBpc1N0cmljdEVxdWFsKHgsIHkpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggPT09IHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHByZXZpb3VzLCBjdXJyZW50LCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSAocHJldmlvdXMgPT09IGN1cnJlbnQpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLmlzU3RyaWN0RXF1YWwgPSBpc1N0cmljdEVxdWFsO1xuXG52YXIgZ3JlYXRlclRoYW4gPSBmdW5jdGlvbiBncmVhdGVyVGhhbih4LCB5KSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4ID4geTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA+IGN1cnJlbnQpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLmdyZWF0ZXJUaGFuID0gZ3JlYXRlclRoYW47XG5cbnZhciBub3RMZXNzVGhhbiA9IGZ1bmN0aW9uIG5vdExlc3NUaGFuKHgsIHkpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggPj0geTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA+PSBjdXJyZW50KSAmJiAoaW5kZXggPCBjb3VudCA/XG4gICAgICAgICAgKHByZXZpb3VzID0gY3VycmVudCwgY3VycmVudCA9IChtb3JlIHx8IDApW2luZGV4XSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKHgsIHksIDAsIG1vcmUubGVuZ3RoKTtcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5ub3RMZXNzVGhhbiA9IG5vdExlc3NUaGFuO1xuXG52YXIgbGVzc1RoYW4gPSBmdW5jdGlvbiBsZXNzVGhhbih4LCB5KSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4IDwgeTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA8IGN1cnJlbnQpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLmxlc3NUaGFuID0gbGVzc1RoYW47XG5cbnZhciBub3RHcmVhdGVyVGhhbiA9IGZ1bmN0aW9uIG5vdEdyZWF0ZXJUaGFuKHgsIHkpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggPD0geTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA8PSBjdXJyZW50KSAmJiAoaW5kZXggPCBjb3VudCA/XG4gICAgICAgICAgKHByZXZpb3VzID0gY3VycmVudCwgY3VycmVudCA9IChtb3JlIHx8IDApW2luZGV4XSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKHgsIHksIDAsIG1vcmUubGVuZ3RoKTtcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5ub3RHcmVhdGVyVGhhbiA9IG5vdEdyZWF0ZXJUaGFuO1xuXG52YXIgc3VtID0gZnVuY3Rpb24gc3VtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhICsgYiArIGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSArICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSArIGIgKyBjICsgZCArIGUgKyBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMuc3VtID0gc3VtO1xuXG52YXIgc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIldyb25nIG51bWJlciBvZiBhcmdzIHBhc3NlZCB0bzogLVwiKTsgfSkoKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gMCAtIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhIC0gYiAtIGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgLSBiIC0gYyAtIGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgLSBiIC0gYyAtIGQgLSBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhIC0gYiAtIGMgLSBkIC0gZSAtIGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSAtICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSAtIGIgLSBjIC0gZCAtIGUgLSBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcblxudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIGRpdmlkZShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIldyb25nIG51bWJlciBvZiBhcmdzIHBhc3NlZCB0bzogL1wiKTsgfSkoKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gMSAvIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgLyBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhIC8gYiAvIGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgLyBiIC8gYyAvIGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgLyBiIC8gYyAvIGQgLyBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhIC8gYiAvIGMgLyBkIC8gZSAvIGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSAvICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSAvIGIgLyBjIC8gZCAvIGUgLyBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMuZGl2aWRlID0gZGl2aWRlO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiBtdWx0aXBseShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBhO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBhICogYjtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gYSAqIGIgKiBjO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBhICogYiAqIGMgKiBkO1xuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiBhICogYiAqIGMgKiBkICogZTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gYSAqIGIgKiBjICogZCAqIGUgKiBmO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCA2KTtcbiAgICAgIHJldHVybiAoZnVuY3Rpb24gbG9vcCh2YWx1ZSwgaW5kZXgsIGNvdW50KSB7XG4gICAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICAgIHJlY3VyID0gaW5kZXggPCBjb3VudCA/XG4gICAgICAgICAgKHZhbHVlID0gdmFsdWUgKiAoKG1vcmUgfHwgMClbaW5kZXhdKSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKGEgKiBiICogYyAqIGQgKiBlICogZiwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLm11bHRpcGx5ID0gbXVsdGlwbHk7XG5cbnZhciBhbmQgPSBmdW5jdGlvbiBhbmQoYSwgYiwgYywgZCwgZSwgZikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gYTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gYSAmJiBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhICYmIGIgJiYgYztcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gYSAmJiBiICYmIGMgJiYgZDtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gYSAmJiBiICYmIGMgJiYgZCAmJiBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhICYmIGIgJiYgYyAmJiBkICYmIGUgJiYgZjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgNik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AodmFsdWUsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IGluZGV4IDwgY291bnQgP1xuICAgICAgICAgICh2YWx1ZSA9IHZhbHVlICYmICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSAmJiBiICYmIGMgJiYgZCAmJiBlICYmIGYsIDAsIG1vcmUubGVuZ3RoKTtcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5hbmQgPSBhbmQ7XG5cbnZhciBvciA9IGZ1bmN0aW9uIG9yKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIHZvaWQoMCk7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgfHwgYjtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gYSB8fCBiIHx8IGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgfHwgYiB8fCBjIHx8IGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgfHwgYiB8fCBjIHx8IGQgfHwgZTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gYSB8fCBiIHx8IGMgfHwgZCB8fCBlIHx8IGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSB8fCAoKG1vcmUgfHwgMClbaW5kZXhdKSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKGEgfHwgYiB8fCBjIHx8IGQgfHwgZSB8fCBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMub3IgPSBvcjtcblxudmFyIHByaW50ID0gZnVuY3Rpb24gcHJpbnQoKSB7XG4gIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUubG9nLCBtb3JlKTtcbn07XG5leHBvcnRzLnByaW50ID0gcHJpbnRcblxufSkoKSIsInZhciBtZXJnZSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5tZXJnZTtcbnZhciBpbmMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaW5jO1xudmFyIGRlYyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kZWM7XG52YXIgc3RyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnN0cjtcbnZhciBrZXlWYWx1ZXMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkua2V5VmFsdWVzO1xudmFyIGlzRGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0RpY3Rpb25hcnk7XG52YXIgaXNTdHJpbmcgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNTdHJpbmc7XG52YXIgaXNOdW1iZXIgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOdW1iZXI7XG52YXIgaXNGbiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0ZuO1xudmFyIGlzVmVjdG9yID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzVmVjdG9yO1xudmFyIGlzTmlsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzTmlsOztcblxudmFyIExpc3QgPSBmdW5jdGlvbiBMaXN0KGhlYWQsIHRhaWwpIHtcbiAgdGhpcy5oZWFkID0gaGVhZDtcbiAgdGhpcy50YWlsID0gdGFpbCB8fCAobGlzdCgpKTtcbiAgdGhpcy5sZW5ndGggPSBpbmMoY291bnQodGhpcy50YWlsKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuTGlzdC5wcm90b3R5cGUubGVuZ3RoID0gMDtcblxuTGlzdC50eXBlID0gXCJ3aXNwLmxpc3RcIjtcblxuTGlzdC5wcm90b3R5cGUudHlwZSA9IExpc3QudHlwZTtcblxuTGlzdC5wcm90b3R5cGUudGFpbCA9IE9iamVjdC5jcmVhdGUoTGlzdC5wcm90b3R5cGUpO1xuXG5MaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBsaXN0KSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShsaXN0KSA/XG4gICAgICBcIlwiICsgXCIoXCIgKyAocmVzdWx0LnN1YnN0cigxKSkgKyBcIilcIiA6XG4gICAgICAocmVzdWx0ID0gXCJcIiArIHJlc3VsdCArIFwiIFwiICsgKGlzVmVjdG9yKGZpcnN0KGxpc3QpKSA/XG4gICAgICAgIFwiXCIgKyBcIltcIiArIChmaXJzdChsaXN0KS5qb2luKFwiIFwiKSkgKyBcIl1cIiA6XG4gICAgICBpc05pbChmaXJzdChsaXN0KSkgP1xuICAgICAgICBcIm5pbFwiIDpcbiAgICAgIGlzU3RyaW5nKGZpcnN0KGxpc3QpKSA/XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGZpcnN0KGxpc3QpKSA6XG4gICAgICBpc051bWJlcihmaXJzdChsaXN0KSkgP1xuICAgICAgICBKU09OLnN0cmluZ2lmeShmaXJzdChsaXN0KSkgOlxuICAgICAgICBmaXJzdChsaXN0KSksIGxpc3QgPSByZXN0KGxpc3QpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoXCJcIiwgdGhpcyk7XG59O1xuXG52YXIgbGF6eVNlcVZhbHVlID0gZnVuY3Rpb24gbGF6eVNlcVZhbHVlKGxhenlTZXEpIHtcbiAgcmV0dXJuICEobGF6eVNlcS5yZWFsaXplZCkgP1xuICAgIChsYXp5U2VxLnJlYWxpemVkID0gdHJ1ZSkgJiYgKGxhenlTZXEueCA9IGxhenlTZXEueCgpKSA6XG4gICAgbGF6eVNlcS54O1xufTtcblxudmFyIExhenlTZXEgPSBmdW5jdGlvbiBMYXp5U2VxKHJlYWxpemVkLCB4KSB7XG4gIHRoaXMucmVhbGl6ZWQgPSByZWFsaXplZCB8fCBmYWxzZTtcbiAgdGhpcy54ID0geDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5MYXp5U2VxLnR5cGUgPSBcIndpc3AubGF6eS5zZXFcIjtcblxuTGF6eVNlcS5wcm90b3R5cGUudHlwZSA9IExhenlTZXEudHlwZTtcblxudmFyIGxhenlTZXEgPSBmdW5jdGlvbiBsYXp5U2VxKHJlYWxpemVkLCBib2R5KSB7XG4gIHJldHVybiBuZXcgTGF6eVNlcShyZWFsaXplZCwgYm9keSk7XG59O1xuZXhwb3J0cy5sYXp5U2VxID0gbGF6eVNlcTtcblxudmFyIGlzTGF6eVNlcSA9IGZ1bmN0aW9uIGlzTGF6eVNlcSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgKExhenlTZXEudHlwZSA9PT0gdmFsdWUudHlwZSk7XG59O1xuZXhwb3J0cy5pc0xhenlTZXEgPSBpc0xhenlTZXE7XG5cbnVuZGVmaW5lZDtcblxudmFyIGlzTGlzdCA9IGZ1bmN0aW9uIGlzTGlzdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgKExpc3QudHlwZSA9PT0gdmFsdWUudHlwZSk7XG59O1xuZXhwb3J0cy5pc0xpc3QgPSBpc0xpc3Q7XG5cbnZhciBsaXN0ID0gZnVuY3Rpb24gbGlzdCgpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDAgP1xuICAgIE9iamVjdC5jcmVhdGUoTGlzdC5wcm90b3R5cGUpIDpcbiAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHRhaWwsIGhlYWQpIHtcbiAgICAgIHJldHVybiBjb25zKGhlYWQsIHRhaWwpO1xuICAgIH0sIGxpc3QoKSk7XG59O1xuZXhwb3J0cy5saXN0ID0gbGlzdDtcblxudmFyIGNvbnMgPSBmdW5jdGlvbiBjb25zKGhlYWQsIHRhaWwpIHtcbiAgcmV0dXJuIG5ldyBMaXN0KGhlYWQsIHRhaWwpO1xufTtcbmV4cG9ydHMuY29ucyA9IGNvbnM7XG5cbnZhciByZXZlcnNlTGlzdCA9IGZ1bmN0aW9uIHJldmVyc2VMaXN0KHNlcXVlbmNlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChpdGVtcywgc291cmNlKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShzb3VyY2UpID9cbiAgICAgIGxpc3QuYXBwbHkobGlzdCwgaXRlbXMpIDpcbiAgICAgIChpdGVtcyA9IFtmaXJzdChzb3VyY2UpXS5jb25jYXQoaXRlbXMpLCBzb3VyY2UgPSByZXN0KHNvdXJjZSksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgc2VxdWVuY2UpO1xufTtcblxudmFyIGlzU2VxdWVudGlhbCA9IGZ1bmN0aW9uIGlzU2VxdWVudGlhbCh4KSB7XG4gIHJldHVybiAoaXNMaXN0KHgpKSB8fCAoaXNWZWN0b3IoeCkpIHx8IChpc0xhenlTZXEoeCkpIHx8IChpc0RpY3Rpb25hcnkoeCkpIHx8IChpc1N0cmluZyh4KSk7XG59O1xuZXhwb3J0cy5pc1NlcXVlbnRpYWwgPSBpc1NlcXVlbnRpYWw7XG5cbnZhciByZXZlcnNlID0gZnVuY3Rpb24gcmV2ZXJzZShzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgcmV2ZXJzZUxpc3Qoc2VxdWVuY2UpIDpcbiAgaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5yZXZlcnNlKCkgOlxuICBpc05pbChzZXF1ZW5jZSkgP1xuICAgIGxpc3QoKSA6XG4gIFwiZWxzZVwiID9cbiAgICByZXZlcnNlKHNlcShzZXF1ZW5jZSkpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMucmV2ZXJzZSA9IHJldmVyc2U7XG5cbnZhciBtYXAgPSBmdW5jdGlvbiBtYXAoZiwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2UubWFwKGYpIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgbWFwTGlzdChmLCBzZXF1ZW5jZSkgOlxuICBpc05pbChzZXF1ZW5jZSkgP1xuICAgIGxpc3QoKSA6XG4gIFwiZWxzZVwiID9cbiAgICBtYXAoZiwgc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5tYXAgPSBtYXA7XG5cbnZhciBtYXBMaXN0ID0gZnVuY3Rpb24gbWFwTGlzdChmLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBpdGVtcykge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGlzRW1wdHkoaXRlbXMpID9cbiAgICAgIHJldmVyc2UocmVzdWx0KSA6XG4gICAgICAocmVzdWx0ID0gY29ucyhmKGZpcnN0KGl0ZW1zKSksIHJlc3VsdCksIGl0ZW1zID0gcmVzdChpdGVtcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIHNlcXVlbmNlKTtcbn07XG5cbnZhciBmaWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoaXNGLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5maWx0ZXIoaXNGKSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIGZpbHRlckxpc3QoaXNGLCBzZXF1ZW5jZSkgOlxuICBpc05pbChzZXF1ZW5jZSkgP1xuICAgIGxpc3QoKSA6XG4gIFwiZWxzZVwiID9cbiAgICBmaWx0ZXIoaXNGLCBzZXEoc2VxdWVuY2UpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcblxudmFyIGZpbHRlckxpc3QgPSBmdW5jdGlvbiBmaWx0ZXJMaXN0KGlzRiwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHJlc3VsdCwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KGl0ZW1zKSA/XG4gICAgICByZXZlcnNlKHJlc3VsdCkgOlxuICAgICAgKHJlc3VsdCA9IGlzRihmaXJzdChpdGVtcykpID9cbiAgICAgICAgY29ucyhmaXJzdChpdGVtcyksIHJlc3VsdCkgOlxuICAgICAgICByZXN1bHQsIGl0ZW1zID0gcmVzdChpdGVtcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIHNlcXVlbmNlKTtcbn07XG5cbnZhciByZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZikge1xuICB2YXIgcGFyYW1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzSW5pdGlhbCA9IGNvdW50KHBhcmFtcykgPj0gMjtcbiAgICB2YXIgaW5pdGlhbCA9IGhhc0luaXRpYWwgP1xuICAgICAgZmlyc3QocGFyYW1zKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHZhciBzZXF1ZW5jZSA9IGhhc0luaXRpYWwgP1xuICAgICAgc2Vjb25kKHBhcmFtcykgOlxuICAgICAgZmlyc3QocGFyYW1zKTtcbiAgICByZXR1cm4gaXNOaWwoc2VxdWVuY2UpID9cbiAgICAgIGluaXRpYWwgOlxuICAgIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgICBoYXNJbml0aWFsID9cbiAgICAgICAgc2VxdWVuY2UucmVkdWNlKGYsIGluaXRpYWwpIDpcbiAgICAgICAgc2VxdWVuY2UucmVkdWNlKGYpIDpcbiAgICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICAgIGhhc0luaXRpYWwgP1xuICAgICAgICByZWR1Y2VMaXN0KGYsIGluaXRpYWwsIHNlcXVlbmNlKSA6XG4gICAgICAgIHJlZHVjZUxpc3QoZiwgZmlyc3Qoc2VxdWVuY2UpLCByZXN0KHNlcXVlbmNlKSkgOlxuICAgIFwiZWxzZVwiID9cbiAgICAgIHJlZHVjZShmLCBpbml0aWFsLCBzZXEoc2VxdWVuY2UpKSA6XG4gICAgICB2b2lkKDApO1xuICB9KSgpO1xufTtcbmV4cG9ydHMucmVkdWNlID0gcmVkdWNlO1xuXG52YXIgcmVkdWNlTGlzdCA9IGZ1bmN0aW9uIHJlZHVjZUxpc3QoZiwgaW5pdGlhbCwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHJlc3VsdCwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KGl0ZW1zKSA/XG4gICAgICByZXN1bHQgOlxuICAgICAgKHJlc3VsdCA9IGYocmVzdWx0LCBmaXJzdChpdGVtcykpLCBpdGVtcyA9IHJlc3QoaXRlbXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoaW5pdGlhbCwgc2VxdWVuY2UpO1xufTtcblxudmFyIGNvdW50ID0gZnVuY3Rpb24gY291bnQoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgMCA6XG4gICAgKHNlcShzZXF1ZW5jZSkpLmxlbmd0aDtcbn07XG5leHBvcnRzLmNvdW50ID0gY291bnQ7XG5cbnZhciBpc0VtcHR5ID0gZnVuY3Rpb24gaXNFbXB0eShzZXF1ZW5jZSkge1xuICByZXR1cm4gY291bnQoc2VxdWVuY2UpID09PSAwO1xufTtcbmV4cG9ydHMuaXNFbXB0eSA9IGlzRW1wdHk7XG5cbnZhciBmaXJzdCA9IGZ1bmN0aW9uIGZpcnN0KHNlcXVlbmNlKSB7XG4gIHJldHVybiBpc05pbChzZXF1ZW5jZSkgP1xuICAgIHZvaWQoMCkgOlxuICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5oZWFkIDpcbiAgKGlzVmVjdG9yKHNlcXVlbmNlKSkgfHwgKGlzU3RyaW5nKHNlcXVlbmNlKSkgP1xuICAgIChzZXF1ZW5jZSB8fCAwKVswXSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIGZpcnN0KGxhenlTZXFWYWx1ZShzZXF1ZW5jZSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIGZpcnN0KHNlcShzZXF1ZW5jZSkpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuZmlyc3QgPSBmaXJzdDtcblxudmFyIHNlY29uZCA9IGZ1bmN0aW9uIHNlY29uZChzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNOaWwoc2VxdWVuY2UpID9cbiAgICB2b2lkKDApIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgZmlyc3QocmVzdChzZXF1ZW5jZSkpIDpcbiAgKGlzVmVjdG9yKHNlcXVlbmNlKSkgfHwgKGlzU3RyaW5nKHNlcXVlbmNlKSkgP1xuICAgIChzZXF1ZW5jZSB8fCAwKVsxXSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIHNlY29uZChsYXp5U2VxVmFsdWUoc2VxdWVuY2UpKSA6XG4gIFwiZWxzZVwiID9cbiAgICBmaXJzdChyZXN0KHNlcShzZXF1ZW5jZSkpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNlY29uZCA9IHNlY29uZDtcblxudmFyIHRoaXJkID0gZnVuY3Rpb24gdGhpcmQoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgdm9pZCgwKSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIGZpcnN0KHJlc3QocmVzdChzZXF1ZW5jZSkpKSA6XG4gIChpc1ZlY3RvcihzZXF1ZW5jZSkpIHx8IChpc1N0cmluZyhzZXF1ZW5jZSkpID9cbiAgICAoc2VxdWVuY2UgfHwgMClbMl0gOlxuICBpc0xhenlTZXEoc2VxdWVuY2UpID9cbiAgICB0aGlyZChsYXp5U2VxVmFsdWUoc2VxdWVuY2UpKSA6XG4gIFwiZWxzZVwiID9cbiAgICBzZWNvbmQocmVzdChzZXEoc2VxdWVuY2UpKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy50aGlyZCA9IHRoaXJkO1xuXG52YXIgcmVzdCA9IGZ1bmN0aW9uIHJlc3Qoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgbGlzdCgpIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2UudGFpbCA6XG4gIChpc1ZlY3RvcihzZXF1ZW5jZSkpIHx8IChpc1N0cmluZyhzZXF1ZW5jZSkpID9cbiAgICBzZXF1ZW5jZS5zbGljZSgxKSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIHJlc3QobGF6eVNlcVZhbHVlKHNlcXVlbmNlKSkgOlxuICBcImVsc2VcIiA/XG4gICAgcmVzdChzZXEoc2VxdWVuY2UpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnJlc3QgPSByZXN0O1xuXG52YXIgbGFzdE9mTGlzdCA9IGZ1bmN0aW9uIGxhc3RPZkxpc3QobGlzdCkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoaXRlbSwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KGl0ZW1zKSA/XG4gICAgICBpdGVtIDpcbiAgICAgIChpdGVtID0gZmlyc3QoaXRlbXMpLCBpdGVtcyA9IHJlc3QoaXRlbXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoZmlyc3QobGlzdCksIHJlc3QobGlzdCkpO1xufTtcblxudmFyIGxhc3QgPSBmdW5jdGlvbiBsYXN0KHNlcXVlbmNlKSB7XG4gIHJldHVybiAoaXNWZWN0b3Ioc2VxdWVuY2UpKSB8fCAoaXNTdHJpbmcoc2VxdWVuY2UpKSA/XG4gICAgKHNlcXVlbmNlIHx8IDApW2RlYyhjb3VudChzZXF1ZW5jZSkpXSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIGxhc3RPZkxpc3Qoc2VxdWVuY2UpIDpcbiAgaXNOaWwoc2VxdWVuY2UpID9cbiAgICB2b2lkKDApIDpcbiAgaXNMYXp5U2VxKHNlcXVlbmNlKSA/XG4gICAgbGFzdChsYXp5U2VxVmFsdWUoc2VxdWVuY2UpKSA6XG4gIFwiZWxzZVwiID9cbiAgICBsYXN0KHNlcShzZXF1ZW5jZSkpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMubGFzdCA9IGxhc3Q7XG5cbnZhciBidXRsYXN0ID0gZnVuY3Rpb24gYnV0bGFzdChzZXF1ZW5jZSkge1xuICB2YXIgaXRlbXMgPSBpc05pbChzZXF1ZW5jZSkgP1xuICAgIHZvaWQoMCkgOlxuICBpc1N0cmluZyhzZXF1ZW5jZSkgP1xuICAgIHN1YnMoc2VxdWVuY2UsIDAsIGRlYyhjb3VudChzZXF1ZW5jZSkpKSA6XG4gIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2Uuc2xpY2UoMCwgZGVjKGNvdW50KHNlcXVlbmNlKSkpIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgbGlzdC5hcHBseShsaXN0LCBidXRsYXN0KHZlYyhzZXF1ZW5jZSkpKSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIGJ1dGxhc3QobGF6eVNlcVZhbHVlKHNlcXVlbmNlKSkgOlxuICBcImVsc2VcIiA/XG4gICAgYnV0bGFzdChzZXEoc2VxdWVuY2UpKSA6XG4gICAgdm9pZCgwKTtcbiAgcmV0dXJuICEoKGlzTmlsKGl0ZW1zKSkgfHwgKGlzRW1wdHkoaXRlbXMpKSkgP1xuICAgIGl0ZW1zIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuYnV0bGFzdCA9IGJ1dGxhc3Q7XG5cbnZhciB0YWtlID0gZnVuY3Rpb24gdGFrZShuLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNOaWwoc2VxdWVuY2UpID9cbiAgICBsaXN0KCkgOlxuICBpc1ZlY3RvcihzZXF1ZW5jZSkgP1xuICAgIHRha2VGcm9tVmVjdG9yKG4sIHNlcXVlbmNlKSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIHRha2VGcm9tTGlzdChuLCBzZXF1ZW5jZSkgOlxuICBpc0xhenlTZXEoc2VxdWVuY2UpID9cbiAgICB0YWtlKG4sIGxhenlTZXFWYWx1ZShzZXF1ZW5jZSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIHRha2Uobiwgc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy50YWtlID0gdGFrZTtcblxudmFyIHRha2VWZWN0b3JXaGlsZSA9IGZ1bmN0aW9uIHRha2VWZWN0b3JXaGlsZShwcmVkaWNhdGUsIHZlY3Rvcikge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCB0YWlsLCBoZWFkKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKCEoaXNFbXB0eSh0YWlsKSkpICYmIChwcmVkaWNhdGUoaGVhZCkpID9cbiAgICAgIChyZXN1bHQgPSBjb25qKHJlc3VsdCwgaGVhZCksIHRhaWwgPSByZXN0KHRhaWwpLCBoZWFkID0gZmlyc3QodGFpbCksIGxvb3ApIDpcbiAgICAgIHJlc3VsdDtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoW10sIHZlY3RvciwgZmlyc3QodmVjdG9yKSk7XG59O1xuXG52YXIgdGFrZUxpc3RXaGlsZSA9IGZ1bmN0aW9uIHRha2VMaXN0V2hpbGUocHJlZGljYXRlLCBpdGVtcykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCB0YWlsLCBoZWFkKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKCEoaXNFbXB0eSh0YWlsKSkpICYmIChpc1ByZWRpY2F0ZShoZWFkKSkgP1xuICAgICAgKHJlc3VsdCA9IGNvbmoocmVzdWx0LCBoZWFkKSwgdGFpbCA9IHJlc3QodGFpbCksIGhlYWQgPSBmaXJzdCh0YWlsKSwgbG9vcCkgOlxuICAgICAgbGlzdC5hcHBseShsaXN0LCByZXN1bHQpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgaXRlbXMsIGZpcnN0KGl0ZW1zKSk7XG59O1xuXG52YXIgdGFrZVdoaWxlID0gZnVuY3Rpb24gdGFrZVdoaWxlKHByZWRpY2F0ZSwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgbGlzdCgpIDpcbiAgaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICB0YWtlVmVjdG9yV2hpbGUocHJlZGljYXRlLCBzZXF1ZW5jZSkgOlxuICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICB0YWtlVmVjdG9yV2hpbGUocHJlZGljYXRlLCBzZXF1ZW5jZSkgOlxuICBcImVsc2VcIiA/XG4gICAgdGFrZVdoaWxlKHByZWRpY2F0ZSwgbGF6eVNlcVZhbHVlKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG5cbnZhciB0YWtlRnJvbVZlY3RvciA9IGZ1bmN0aW9uIHRha2VGcm9tVmVjdG9yKG4sIHZlY3Rvcikge1xuICByZXR1cm4gdmVjdG9yLnNsaWNlKDAsIG4pO1xufTtcblxudmFyIHRha2VGcm9tTGlzdCA9IGZ1bmN0aW9uIHRha2VGcm9tTGlzdChuLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AodGFrZW4sIGl0ZW1zLCBuKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKG4gPT09IDApIHx8IChpc0VtcHR5KGl0ZW1zKSkgP1xuICAgICAgcmV2ZXJzZSh0YWtlbikgOlxuICAgICAgKHRha2VuID0gY29ucyhmaXJzdChpdGVtcyksIHRha2VuKSwgaXRlbXMgPSByZXN0KGl0ZW1zKSwgbiA9IGRlYyhuKSwgbG9vcCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKGxpc3QoKSwgc2VxdWVuY2UsIG4pO1xufTtcblxudmFyIGRyb3BGcm9tTGlzdCA9IGZ1bmN0aW9uIGRyb3BGcm9tTGlzdChuLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AobGVmdCwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSAobGVmdCA8IDEpIHx8IChpc0VtcHR5KGl0ZW1zKSkgP1xuICAgICAgaXRlbXMgOlxuICAgICAgKGxlZnQgPSBkZWMobGVmdCksIGl0ZW1zID0gcmVzdChpdGVtcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShuLCBzZXF1ZW5jZSk7XG59O1xuXG52YXIgZHJvcCA9IGZ1bmN0aW9uIGRyb3Aobiwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIG4gPD0gMCA/XG4gICAgc2VxdWVuY2UgOlxuICBpc1N0cmluZyhzZXF1ZW5jZSkgP1xuICAgIHNlcXVlbmNlLnN1YnN0cihuKSA6XG4gIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2Uuc2xpY2UobikgOlxuICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICBkcm9wRnJvbUxpc3Qobiwgc2VxdWVuY2UpIDpcbiAgaXNOaWwoc2VxdWVuY2UpID9cbiAgICBsaXN0KCkgOlxuICBpc0xhenlTZXEoc2VxdWVuY2UpID9cbiAgICBkcm9wKG4sIGxhenlTZXFWYWx1ZShzZXF1ZW5jZSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIGRyb3Aobiwgc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5kcm9wID0gZHJvcDtcblxudmFyIGNvbmpMaXN0ID0gZnVuY3Rpb24gY29uakxpc3Qoc2VxdWVuY2UsIGl0ZW1zKSB7XG4gIHJldHVybiByZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCBpdGVtKSB7XG4gICAgcmV0dXJuIGNvbnMoaXRlbSwgcmVzdWx0KTtcbiAgfSwgc2VxdWVuY2UsIGl0ZW1zKTtcbn07XG5cbnZhciBjb25qID0gZnVuY3Rpb24gY29uaihzZXF1ZW5jZSkge1xuICB2YXIgaXRlbXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5jb25jYXQoaXRlbXMpIDpcbiAgaXNTdHJpbmcoc2VxdWVuY2UpID9cbiAgICBcIlwiICsgc2VxdWVuY2UgKyAoc3RyLmFwcGx5KHN0ciwgaXRlbXMpKSA6XG4gIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgbGlzdC5hcHBseShsaXN0LCByZXZlcnNlKGl0ZW1zKSkgOlxuICAoaXNMaXN0KHNlcXVlbmNlKSkgfHwgKGlzTGF6eVNlcSgpKSA/XG4gICAgY29uakxpc3Qoc2VxdWVuY2UsIGl0ZW1zKSA6XG4gIGlzRGljdGlvbmFyeShzZXF1ZW5jZSkgP1xuICAgIG1lcmdlKHNlcXVlbmNlLCBtZXJnZS5hcHBseShtZXJnZSwgaXRlbXMpKSA6XG4gIFwiZWxzZVwiID9cbiAgICAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIlwiICsgXCJUeXBlIGNhbid0IGJlIGNvbmpvaW5lZCBcIiArIHNlcXVlbmNlKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbmogPSBjb25qO1xuXG52YXIgY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KCkge1xuICB2YXIgc2VxdWVuY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIHJldmVyc2UocmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgc2VxdWVuY2UpIHtcbiAgICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgaXRlbSkge1xuICAgICAgcmV0dXJuIGNvbnMoaXRlbSwgcmVzdWx0KTtcbiAgICB9LCByZXN1bHQsIHNlcShzZXF1ZW5jZSkpO1xuICB9LCBsaXN0KCksIHNlcXVlbmNlcykpO1xufTtcbmV4cG9ydHMuY29uY2F0ID0gY29uY2F0O1xuXG52YXIgc2VxID0gZnVuY3Rpb24gc2VxKHNlcXVlbmNlKSB7XG4gIHJldHVybiBpc05pbChzZXF1ZW5jZSkgP1xuICAgIHZvaWQoMCkgOlxuICAoaXNWZWN0b3Ioc2VxdWVuY2UpKSB8fCAoaXNMaXN0KHNlcXVlbmNlKSkgfHwgKGlzTGF6eVNlcShzZXF1ZW5jZSkpID9cbiAgICBzZXF1ZW5jZSA6XG4gIGlzU3RyaW5nKHNlcXVlbmNlKSA/XG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2VxdWVuY2UpIDpcbiAgaXNEaWN0aW9uYXJ5KHNlcXVlbmNlKSA/XG4gICAga2V5VmFsdWVzKHNlcXVlbmNlKSA6XG4gIFwiZGVmYXVsdFwiID9cbiAgICAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIlwiICsgXCJDYW4gbm90IHNlcSBcIiArIHNlcXVlbmNlKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNlcSA9IHNlcTtcblxudmFyIGlzU2VxID0gZnVuY3Rpb24gaXNTZXEoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIChpc0xpc3Qoc2VxdWVuY2UpKSB8fCAoaXNMYXp5U2VxKHNlcXVlbmNlKSk7XG59O1xuZXhwb3J0cy5pc1NlcSA9IGlzU2VxO1xuXG52YXIgbGlzdFRvVmVjdG9yID0gZnVuY3Rpb24gbGlzdFRvVmVjdG9yKHNvdXJjZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBsaXN0KSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShsaXN0KSA/XG4gICAgICByZXN1bHQgOlxuICAgICAgKHJlc3VsdCA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmlyc3QobGlzdCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSkoKSwgbGlzdCA9IHJlc3QobGlzdCksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgc291cmNlKTtcbn07XG5cbnZhciB2ZWMgPSBmdW5jdGlvbiB2ZWMoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgW10gOlxuICBpc1ZlY3RvcihzZXF1ZW5jZSkgP1xuICAgIHNlcXVlbmNlIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgbGlzdFRvVmVjdG9yKHNlcXVlbmNlKSA6XG4gIFwiZWxzZVwiID9cbiAgICB2ZWMoc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy52ZWMgPSB2ZWM7XG5cbnZhciBzb3J0ID0gZnVuY3Rpb24gc29ydChmLCBpdGVtcykge1xuICB2YXIgaGFzQ29tcGFyYXRvciA9IGlzRm4oZik7XG4gIHZhciBpdGVtcyA9ICghKGhhc0NvbXBhcmF0b3IpKSAmJiAoaXNOaWwoaXRlbXMpKSA/XG4gICAgZiA6XG4gICAgaXRlbXM7XG4gIHZhciBjb21wYXJlID0gaGFzQ29tcGFyYXRvciA/XG4gICAgZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuIGYoYSwgYikgP1xuICAgICAgICAwIDpcbiAgICAgICAgMTtcbiAgICB9IDpcbiAgICB2b2lkKDApO1xuICByZXR1cm4gaXNOaWwoaXRlbXMpID9cbiAgICBsaXN0KCkgOlxuICBpc1ZlY3RvcihpdGVtcykgP1xuICAgIGl0ZW1zLnNvcnQoY29tcGFyZSkgOlxuICBpc0xpc3QoaXRlbXMpID9cbiAgICBsaXN0LmFwcGx5KGxpc3QsIHZlYyhpdGVtcykuc29ydChjb21wYXJlKSkgOlxuICBpc0RpY3Rpb25hcnkoaXRlbXMpID9cbiAgICBzZXEoaXRlbXMpLnNvcnQoY29tcGFyZSkgOlxuICBcImVsc2VcIiA/XG4gICAgc29ydChmLCBzZXEoaXRlbXMpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNvcnQgPSBzb3J0O1xuXG52YXIgcmVwZWF0ID0gZnVuY3Rpb24gcmVwZWF0KG4sIHgpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKG4sIHJlc3VsdCkge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IG4gPD0gMCA/XG4gICAgICByZXN1bHQgOlxuICAgICAgKG4gPSBkZWMobiksIHJlc3VsdCA9IGNvbmoocmVzdWx0LCB4KSwgbG9vcCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKG4sIFtdKTtcbn07XG5leHBvcnRzLnJlcGVhdCA9IHJlcGVhdFxuIiwidmFyIGlzU3RyaW5nID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzU3RyaW5nO1xudmFyIGlzTmlsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzTmlsO1xudmFyIHJlTWF0Y2hlcyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5yZU1hdGNoZXM7XG52YXIgc3VicyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdWJzO1xudmFyIHN0ciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdHI7O1xuXG52YXIgaXNFbXB0eSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNFbXB0eTtcbnZhciB2ZWMgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnZlYzs7XG5cbnZhciBzcGxpdCA9IGZ1bmN0aW9uIHNwbGl0KHN0cmluZywgcGF0dGVybiwgbGltaXQpIHtcbiAgcmV0dXJuIHN0cmluZy5zcGxpdChwYXR0ZXJuLCBsaW1pdCk7XG59O1xuZXhwb3J0cy5zcGxpdCA9IHNwbGl0O1xuXG52YXIgam9pbiA9IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yLCBjb2xsKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciBjb2xsID0gc2VwYXJhdG9yO1xuICAgICAgcmV0dXJuIHN0ci5hcHBseShzdHIsIHZlYyhjb2xsKSk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHZlYyhjb2xsKS5qb2luKHNlcGFyYXRvcik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBFcnJvcihcIkludmFsaWQgYXJpdHlcIik7IH0pKClcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5qb2luID0gam9pbjtcblxudmFyIHVwcGVyQ2FzZSA9IGZ1bmN0aW9uIHVwcGVyQ2FzZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50b1VwcGVyQ2FzZSgpO1xufTtcbmV4cG9ydHMudXBwZXJDYXNlID0gdXBwZXJDYXNlO1xuXG52YXIgdXBwZXJDYXNlID0gZnVuY3Rpb24gdXBwZXJDYXNlKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRvVXBwZXJDYXNlKCk7XG59O1xuZXhwb3J0cy51cHBlckNhc2UgPSB1cHBlckNhc2U7XG5cbnZhciBsb3dlckNhc2UgPSBmdW5jdGlvbiBsb3dlckNhc2Uoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKTtcbn07XG5leHBvcnRzLmxvd2VyQ2FzZSA9IGxvd2VyQ2FzZTtcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICByZXR1cm4gY291bnQoc3RyaW5nKSA8IDIgP1xuICAgIHVwcGVyQ2FzZShzdHJpbmcpIDpcbiAgICBcIlwiICsgKHVwcGVyQ2FzZShzdWJzKHMsIDAsIDEpKSkgKyAobG93ZXJDYXNlKHN1YnMocywgMSkpKTtcbn07XG5leHBvcnRzLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplO1xuXG52YXIgcmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uoc3RyaW5nLCBtYXRjaCwgcmVwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKG1hdGNoLCByZXBsYWNlbWVudCk7XG59O1xuZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcblxudmFyIF9fTEVGVFNQQUNFU19fID0gL15cXHNcXHMqLztcbmV4cG9ydHMuX19MRUZUU1BBQ0VTX18gPSBfX0xFRlRTUEFDRVNfXztcblxudmFyIF9fUklHSFRTUEFDRVNfXyA9IC9cXHNcXHMqJC87XG5leHBvcnRzLl9fUklHSFRTUEFDRVNfXyA9IF9fUklHSFRTUEFDRVNfXztcblxudmFyIF9fU1BBQ0VTX18gPSAvXlxcc1xccyokLztcbmV4cG9ydHMuX19TUEFDRVNfXyA9IF9fU1BBQ0VTX187XG5cbnZhciB0cmltbCA9IGlzTmlsKFwiXCIudHJpbUxlZnQpID9cbiAgZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9fTEVGVFNQQUNFU19fLCBcIlwiKTtcbiAgfSA6XG4gIGZ1bmN0aW9uIHRyaW1sKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcudHJpbUxlZnQoKTtcbiAgfTtcbmV4cG9ydHMudHJpbWwgPSB0cmltbDtcblxudmFyIHRyaW1yID0gaXNOaWwoXCJcIi50cmltUmlnaHQpID9cbiAgZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9fUklHSFRTUEFDRVNfXywgXCJcIik7XG4gIH0gOlxuICBmdW5jdGlvbiB0cmltcihzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnRyaW1SaWdodCgpO1xuICB9O1xuZXhwb3J0cy50cmltciA9IHRyaW1yO1xuXG52YXIgdHJpbSA9IGlzTmlsKFwiXCIudHJpbSkgP1xuICBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoX19MRUZUU1BBQ0VTX18pLnJlcGxhY2UoX19SSUdIVFNQQUNFU19fKTtcbiAgfSA6XG4gIGZ1bmN0aW9uIHRyaW0oc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy50cmltKCk7XG4gIH07XG5leHBvcnRzLnRyaW0gPSB0cmltO1xuXG52YXIgaXNCbGFuayA9IGZ1bmN0aW9uIGlzQmxhbmsoc3RyaW5nKSB7XG4gIHJldHVybiAoaXNOaWwoc3RyaW5nKSkgfHwgKGlzRW1wdHkoc3RyaW5nKSkgfHwgKHJlTWF0Y2hlcyhfX1NQQUNFU19fLCBzdHJpbmcpKTtcbn07XG5leHBvcnRzLmlzQmxhbmsgPSBpc0JsYW5rXG4iLCJ2YXIgbGF6eVNlcSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGF6eVNlcTtcbnZhciBzb3J0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5zb3J0O1xudmFyIGJ1dGxhc3QgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmJ1dGxhc3Q7XG52YXIgbGFzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGFzdDtcbnZhciBjb25jYXQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmNvbmNhdDtcbnZhciByZXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5yZXN0O1xudmFyIGNvbmogPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmNvbmo7XG52YXIgY29ucyA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY29ucztcbnZhciB2ZWMgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnZlYztcbnZhciBtYXAgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLm1hcDtcbnZhciByZXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5yZXN0O1xudmFyIHRoaXJkID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS50aGlyZDtcbnZhciBzZWNvbmQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnNlY29uZDtcbnZhciBmaXJzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuZmlyc3Q7XG52YXIgaXNFbXB0eSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNFbXB0eTtcbnZhciBjb3VudCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY291bnQ7XG52YXIgaXNMaXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5pc0xpc3Q7XG52YXIgbGlzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGlzdDs7XG5cbnZhciBpc1N0cmljdEVxdWFsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzU3RyaWN0RXF1YWw7XG52YXIgaXNFcXVhbCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0VxdWFsO1xudmFyIHZhbHMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkudmFscztcbnZhciBjaGFyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmNoYXI7XG52YXIgc3VicyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdWJzO1xudmFyIHN0ciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdHI7XG52YXIgcmVGaW5kID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnJlRmluZDtcbnZhciByZU1hdGNoZXMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkucmVNYXRjaGVzO1xudmFyIHJlUGF0dGVybiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5yZVBhdHRlcm47XG52YXIgaXNEaWN0aW9uYXJ5ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzRGljdGlvbmFyeTtcbnZhciBpc09iamVjdCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc09iamVjdDtcbnZhciBpc0Jvb2xlYW4gPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNCb29sZWFuO1xudmFyIGlzTnVtYmVyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzTnVtYmVyO1xudmFyIGlzU3RyaW5nID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzU3RyaW5nO1xudmFyIGlzVmVjdG9yID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzVmVjdG9yO1xudmFyIGRlYyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kZWM7XG52YXIgaW5jID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmluYztcbnZhciBpc05pbCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc05pbDtcbnZhciBrZXlzID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmtleXM7XG52YXIgZGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kaWN0aW9uYXJ5O1xudmFyIGlzT2RkID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzT2RkOztcblxudmFyIGdlbnN5bSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmdlbnN5bTtcbnZhciBuYW1lID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkubmFtZTtcbnZhciB3aXRoTWV0YSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLndpdGhNZXRhO1xudmFyIG1ldGEgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5tZXRhO1xudmFyIGtleXdvcmQgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5rZXl3b3JkO1xudmFyIGlzS2V5d29yZCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzS2V5d29yZDtcbnZhciBzeW1ib2wgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5zeW1ib2w7XG52YXIgaXNTeW1ib2wgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5pc1N5bWJvbDs7XG5cbnZhciBqb2luID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkuam9pbjtcbnZhciBzcGxpdCA9IChyZXF1aXJlKFwiLi9zdHJpbmdcIikpLnNwbGl0OztcblxudmFyIHB1c2hCYWNrUmVhZGVyID0gZnVuY3Rpb24gcHVzaEJhY2tSZWFkZXIoc291cmNlLCB1cmkpIHtcbiAgcmV0dXJuIHtcbiAgICBcImxpbmVzXCI6IHNwbGl0KHNvdXJjZSwgXCJcXG5cIiksXG4gICAgXCJidWZmZXJcIjogXCJcIixcbiAgICBcInVyaVwiOiB1cmksXG4gICAgXCJjb2x1bW5cIjogLTEsXG4gICAgXCJsaW5lXCI6IDBcbiAgfTtcbn07XG5leHBvcnRzLnB1c2hCYWNrUmVhZGVyID0gcHVzaEJhY2tSZWFkZXI7XG5cbnZhciBwZWVrQ2hhciA9IGZ1bmN0aW9uIHBlZWtDaGFyKHJlYWRlcikge1xuICB2YXIgbGluZSA9ICgocmVhZGVyIHx8IDApW1wibGluZXNcIl0pWyhyZWFkZXIgfHwgMClbXCJsaW5lXCJdXTtcbiAgdmFyIGNvbHVtbiA9IGluYygocmVhZGVyIHx8IDApW1wiY29sdW1uXCJdKTtcbiAgcmV0dXJuIGlzTmlsKGxpbmUpID9cbiAgICB2b2lkKDApIDpcbiAgICAobGluZVtjb2x1bW5dKSB8fCBcIlxcblwiO1xufTtcbmV4cG9ydHMucGVla0NoYXIgPSBwZWVrQ2hhcjtcblxudmFyIHJlYWRDaGFyID0gZnVuY3Rpb24gcmVhZENoYXIocmVhZGVyKSB7XG4gIHZhciBjaCA9IHBlZWtDaGFyKHJlYWRlcik7XG4gIGlzTmV3bGluZShwZWVrQ2hhcihyZWFkZXIpKSA/XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgKHJlYWRlciB8fCAwKVtcImxpbmVcIl0gPSBpbmMoKHJlYWRlciB8fCAwKVtcImxpbmVcIl0pO1xuICAgICAgcmV0dXJuIChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl0gPSAtMTtcbiAgICB9KSgpIDpcbiAgICAocmVhZGVyIHx8IDApW1wiY29sdW1uXCJdID0gaW5jKChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl0pO1xuICByZXR1cm4gY2g7XG59O1xuZXhwb3J0cy5yZWFkQ2hhciA9IHJlYWRDaGFyO1xuXG52YXIgaXNOZXdsaW5lID0gZnVuY3Rpb24gaXNOZXdsaW5lKGNoKSB7XG4gIHJldHVybiBcIlxcblwiID09PSBjaDtcbn07XG5leHBvcnRzLmlzTmV3bGluZSA9IGlzTmV3bGluZTtcblxudmFyIGlzQnJlYWtpbmdXaGl0ZXNwYWNlID0gZnVuY3Rpb24gaXNCcmVha2luZ1doaXRlc3BhY2UoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gXCIgXCIpIHx8IChjaCA9PT0gXCJcXHRcIikgfHwgKGNoID09PSBcIlxcblwiKSB8fCAoY2ggPT09IFwiXFxyXCIpO1xufTtcbmV4cG9ydHMuaXNCcmVha2luZ1doaXRlc3BhY2UgPSBpc0JyZWFraW5nV2hpdGVzcGFjZTtcblxudmFyIGlzV2hpdGVzcGFjZSA9IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjaCkge1xuICByZXR1cm4gKGlzQnJlYWtpbmdXaGl0ZXNwYWNlKGNoKSkgfHwgKFwiLFwiID09PSBjaCk7XG59O1xuZXhwb3J0cy5pc1doaXRlc3BhY2UgPSBpc1doaXRlc3BhY2U7XG5cbnZhciBpc051bWVyaWMgPSBmdW5jdGlvbiBpc051bWVyaWMoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gXCIwXCIpIHx8IChjaCA9PT0gXCIxXCIpIHx8IChjaCA9PT0gXCIyXCIpIHx8IChjaCA9PT0gXCIzXCIpIHx8IChjaCA9PT0gXCI0XCIpIHx8IChjaCA9PT0gXCI1XCIpIHx8IChjaCA9PT0gXCI2XCIpIHx8IChjaCA9PT0gXCI3XCIpIHx8IChjaCA9PT0gXCI4XCIpIHx8IChjaCA9PT0gXCI5XCIpO1xufTtcbmV4cG9ydHMuaXNOdW1lcmljID0gaXNOdW1lcmljO1xuXG52YXIgaXNDb21tZW50UHJlZml4ID0gZnVuY3Rpb24gaXNDb21tZW50UHJlZml4KGNoKSB7XG4gIHJldHVybiBcIjtcIiA9PT0gY2g7XG59O1xuZXhwb3J0cy5pc0NvbW1lbnRQcmVmaXggPSBpc0NvbW1lbnRQcmVmaXg7XG5cbnZhciBpc051bWJlckxpdGVyYWwgPSBmdW5jdGlvbiBpc051bWJlckxpdGVyYWwocmVhZGVyLCBpbml0Y2gpIHtcbiAgcmV0dXJuIChpc051bWVyaWMoaW5pdGNoKSkgfHwgKCgoXCIrXCIgPT09IGluaXRjaCkgfHwgKFwiLVwiID09PSBpbml0Y2gpKSAmJiAoaXNOdW1lcmljKHBlZWtDaGFyKHJlYWRlcikpKSk7XG59O1xuZXhwb3J0cy5pc051bWJlckxpdGVyYWwgPSBpc051bWJlckxpdGVyYWw7XG5cbnZhciByZWFkZXJFcnJvciA9IGZ1bmN0aW9uIHJlYWRlckVycm9yKHJlYWRlciwgbWVzc2FnZSkge1xuICB2YXIgdGV4dCA9IFwiXCIgKyBtZXNzYWdlICsgXCJcXG5cIiArIFwibGluZTpcIiArICgocmVhZGVyIHx8IDApW1wibGluZVwiXSkgKyBcIlxcblwiICsgXCJjb2x1bW46XCIgKyAoKHJlYWRlciB8fCAwKVtcImNvbHVtblwiXSk7XG4gIHZhciBlcnJvciA9IFN5bnRheEVycm9yKHRleHQsIChyZWFkZXIgfHwgMClbXCJ1cmlcIl0pO1xuICBlcnJvci5saW5lID0gKHJlYWRlciB8fCAwKVtcImxpbmVcIl07XG4gIGVycm9yLmNvbHVtbiA9IChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl07XG4gIGVycm9yLnVyaSA9IChyZWFkZXIgfHwgMClbXCJ1cmlcIl07XG4gIHJldHVybiAoZnVuY3Rpb24oKSB7IHRocm93IGVycm9yOyB9KSgpO1xufTtcbmV4cG9ydHMucmVhZGVyRXJyb3IgPSByZWFkZXJFcnJvcjtcblxudmFyIGlzTWFjcm9UZXJtaW5hdGluZyA9IGZ1bmN0aW9uIGlzTWFjcm9UZXJtaW5hdGluZyhjaCkge1xuICByZXR1cm4gKCEoY2ggPT09IFwiI1wiKSkgJiYgKCEoY2ggPT09IFwiJ1wiKSkgJiYgKCEoY2ggPT09IFwiOlwiKSkgJiYgKG1hY3JvcyhjaCkpO1xufTtcbmV4cG9ydHMuaXNNYWNyb1Rlcm1pbmF0aW5nID0gaXNNYWNyb1Rlcm1pbmF0aW5nO1xuXG52YXIgcmVhZFRva2VuID0gZnVuY3Rpb24gcmVhZFRva2VuKHJlYWRlciwgaW5pdGNoKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChidWZmZXIsIGNoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGlzTmlsKGNoKSkgfHwgKGlzV2hpdGVzcGFjZShjaCkpIHx8IChpc01hY3JvVGVybWluYXRpbmcoY2gpKSA/XG4gICAgICBidWZmZXIgOlxuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyAocmVhZENoYXIocmVhZGVyKSksIGNoID0gcGVla0NoYXIocmVhZGVyKSwgbG9vcCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKGluaXRjaCwgcGVla0NoYXIocmVhZGVyKSk7XG59O1xuZXhwb3J0cy5yZWFkVG9rZW4gPSByZWFkVG9rZW47XG5cbnZhciBza2lwTGluZSA9IGZ1bmN0aW9uIHNraXBMaW5lKHJlYWRlciwgXykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoID0gcmVhZENoYXIocmVhZGVyKTtcbiAgICAgIHJldHVybiAoY2ggPT09IFwiXFxuXCIpIHx8IChjaCA9PT0gXCJcXHJcIikgfHwgKGlzTmlsKGNoKSkgP1xuICAgICAgICByZWFkZXIgOlxuICAgICAgICAobG9vcCk7XG4gICAgfSkoKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoKTtcbn07XG5leHBvcnRzLnNraXBMaW5lID0gc2tpcExpbmU7XG5cbnZhciBpbnRQYXR0ZXJuID0gcmVQYXR0ZXJuKFwiXihbLStdPykoPzooMCl8KFsxLTldWzAtOV0qKXwwW3hYXShbMC05QS1GYS1mXSspfDAoWzAtN10rKXwoWzEtOV1bMC05XT8pW3JSXShbMC05QS1aYS16XSspfDBbMC05XSspKE4pPyRcIik7XG5leHBvcnRzLmludFBhdHRlcm4gPSBpbnRQYXR0ZXJuO1xuXG52YXIgcmF0aW9QYXR0ZXJuID0gcmVQYXR0ZXJuKFwiKFstK10/WzAtOV0rKS8oWzAtOV0rKVwiKTtcbmV4cG9ydHMucmF0aW9QYXR0ZXJuID0gcmF0aW9QYXR0ZXJuO1xuXG52YXIgZmxvYXRQYXR0ZXJuID0gcmVQYXR0ZXJuKFwiKFstK10/WzAtOV0rKFxcXFwuWzAtOV0qKT8oW2VFXVstK10/WzAtOV0rKT8pKE0pP1wiKTtcbmV4cG9ydHMuZmxvYXRQYXR0ZXJuID0gZmxvYXRQYXR0ZXJuO1xuXG52YXIgbWF0Y2hJbnQgPSBmdW5jdGlvbiBtYXRjaEludChzKSB7XG4gIHZhciBncm91cHMgPSByZUZpbmQoaW50UGF0dGVybiwgcyk7XG4gIHZhciBncm91cDMgPSBncm91cHNbMl07XG4gIHJldHVybiAhKChpc05pbChncm91cDMpKSB8fCAoY291bnQoZ3JvdXAzKSA8IDEpKSA/XG4gICAgMCA6XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5lZ2F0ZSA9IFwiLVwiID09PSBncm91cHNbMV0gP1xuICAgICAgICAtMSA6XG4gICAgICAgIDE7XG4gICAgICB2YXIgYSA9IGdyb3Vwc1szXSA/XG4gICAgICAgIFtncm91cHNbM10sIDEwXSA6XG4gICAgICBncm91cHNbNF0gP1xuICAgICAgICBbZ3JvdXBzWzRdLCAxNl0gOlxuICAgICAgZ3JvdXBzWzVdID9cbiAgICAgICAgW2dyb3Vwc1s1XSwgOF0gOlxuICAgICAgZ3JvdXBzWzddID9cbiAgICAgICAgW2dyb3Vwc1s3XSwgcGFyc2VJbnQoZ3JvdXBzWzddKV0gOlxuICAgICAgXCJlbHNlXCIgP1xuICAgICAgICBbdm9pZCgwKSwgdm9pZCgwKV0gOlxuICAgICAgICB2b2lkKDApO1xuICAgICAgdmFyIG4gPSBhWzBdO1xuICAgICAgdmFyIHJhZGl4ID0gYVsxXTtcbiAgICAgIHJldHVybiBpc05pbChuKSA/XG4gICAgICAgIHZvaWQoMCkgOlxuICAgICAgICBuZWdhdGUgKiAocGFyc2VJbnQobiwgcmFkaXgpKTtcbiAgICB9KSgpO1xufTtcbmV4cG9ydHMubWF0Y2hJbnQgPSBtYXRjaEludDtcblxudmFyIG1hdGNoUmF0aW8gPSBmdW5jdGlvbiBtYXRjaFJhdGlvKHMpIHtcbiAgdmFyIGdyb3VwcyA9IHJlRmluZChyYXRpb1BhdHRlcm4sIHMpO1xuICB2YXIgbnVtaW5hdG9yID0gZ3JvdXBzWzFdO1xuICB2YXIgZGVub21pbmF0b3IgPSBncm91cHNbMl07XG4gIHJldHVybiAocGFyc2VJbnQobnVtaW5hdG9yKSkgLyAocGFyc2VJbnQoZGVub21pbmF0b3IpKTtcbn07XG5leHBvcnRzLm1hdGNoUmF0aW8gPSBtYXRjaFJhdGlvO1xuXG52YXIgbWF0Y2hGbG9hdCA9IGZ1bmN0aW9uIG1hdGNoRmxvYXQocykge1xuICByZXR1cm4gcGFyc2VGbG9hdChzKTtcbn07XG5leHBvcnRzLm1hdGNoRmxvYXQgPSBtYXRjaEZsb2F0O1xuXG52YXIgbWF0Y2hOdW1iZXIgPSBmdW5jdGlvbiBtYXRjaE51bWJlcihzKSB7XG4gIHJldHVybiByZU1hdGNoZXMoaW50UGF0dGVybiwgcykgP1xuICAgIG1hdGNoSW50KHMpIDpcbiAgcmVNYXRjaGVzKHJhdGlvUGF0dGVybiwgcykgP1xuICAgIG1hdGNoUmF0aW8ocykgOlxuICByZU1hdGNoZXMoZmxvYXRQYXR0ZXJuLCBzKSA/XG4gICAgbWF0Y2hGbG9hdChzKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm1hdGNoTnVtYmVyID0gbWF0Y2hOdW1iZXI7XG5cbnZhciBlc2NhcGVDaGFyTWFwID0gZnVuY3Rpb24gZXNjYXBlQ2hhck1hcChjKSB7XG4gIHJldHVybiBjID09PSBcInRcIiA/XG4gICAgXCJcXHRcIiA6XG4gIGMgPT09IFwiclwiID9cbiAgICBcIlxcclwiIDpcbiAgYyA9PT0gXCJuXCIgP1xuICAgIFwiXFxuXCIgOlxuICBjID09PSBcIlxcXFxcIiA/XG4gICAgXCJcXFxcXCIgOlxuICBjID09PSBcIlxcXCJcIiA/XG4gICAgXCJcXFwiXCIgOlxuICBjID09PSBcImJcIiA/XG4gICAgXCJcYlwiIDpcbiAgYyA9PT0gXCJmXCIgP1xuICAgIFwiXGZcIiA6XG4gIFwiZWxzZVwiID9cbiAgICB2b2lkKDApIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuZXNjYXBlQ2hhck1hcCA9IGVzY2FwZUNoYXJNYXA7XG5cbnZhciByZWFkMkNoYXJzID0gZnVuY3Rpb24gcmVhZDJDaGFycyhyZWFkZXIpIHtcbiAgcmV0dXJuIFwiXCIgKyAocmVhZENoYXIocmVhZGVyKSkgKyAocmVhZENoYXIocmVhZGVyKSk7XG59O1xuZXhwb3J0cy5yZWFkMkNoYXJzID0gcmVhZDJDaGFycztcblxudmFyIHJlYWQ0Q2hhcnMgPSBmdW5jdGlvbiByZWFkNENoYXJzKHJlYWRlcikge1xuICByZXR1cm4gXCJcIiArIChyZWFkQ2hhcihyZWFkZXIpKSArIChyZWFkQ2hhcihyZWFkZXIpKSArIChyZWFkQ2hhcihyZWFkZXIpKSArIChyZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWQ0Q2hhcnMgPSByZWFkNENoYXJzO1xuXG52YXIgdW5pY29kZTJQYXR0ZXJuID0gcmVQYXR0ZXJuKFwiWzAtOUEtRmEtZl17Mn1cIik7XG5leHBvcnRzLnVuaWNvZGUyUGF0dGVybiA9IHVuaWNvZGUyUGF0dGVybjtcblxudmFyIHVuaWNvZGU0UGF0dGVybiA9IHJlUGF0dGVybihcIlswLTlBLUZhLWZdezR9XCIpO1xuZXhwb3J0cy51bmljb2RlNFBhdHRlcm4gPSB1bmljb2RlNFBhdHRlcm47XG5cbnZhciB2YWxpZGF0ZVVuaWNvZGVFc2NhcGUgPSBmdW5jdGlvbiB2YWxpZGF0ZVVuaWNvZGVFc2NhcGUodW5pY29kZVBhdHRlcm4sIHJlYWRlciwgZXNjYXBlQ2hhciwgdW5pY29kZVN0cikge1xuICByZXR1cm4gcmVNYXRjaGVzKHVuaWNvZGVQYXR0ZXJuLCB1bmljb2RlU3RyKSA/XG4gICAgdW5pY29kZVN0ciA6XG4gICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIlwiICsgXCJVbmV4cGVjdGVkIHVuaWNvZGUgZXNjYXBlIFwiICsgXCJcXFxcXCIgKyBlc2NhcGVDaGFyICsgdW5pY29kZVN0cik7XG59O1xuZXhwb3J0cy52YWxpZGF0ZVVuaWNvZGVFc2NhcGUgPSB2YWxpZGF0ZVVuaWNvZGVFc2NhcGU7XG5cbnZhciBtYWtlVW5pY29kZUNoYXIgPSBmdW5jdGlvbiBtYWtlVW5pY29kZUNoYXIoY29kZVN0ciwgYmFzZSkge1xuICB2YXIgYmFzZSA9IGJhc2UgfHwgMTY7XG4gIHZhciBjb2RlID0gcGFyc2VJbnQoY29kZVN0ciwgYmFzZSk7XG4gIHJldHVybiBjaGFyKGNvZGUpO1xufTtcbmV4cG9ydHMubWFrZVVuaWNvZGVDaGFyID0gbWFrZVVuaWNvZGVDaGFyO1xuXG52YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uIGVzY2FwZUNoYXIoYnVmZmVyLCByZWFkZXIpIHtcbiAgdmFyIGNoID0gcmVhZENoYXIocmVhZGVyKTtcbiAgdmFyIG1hcHJlc3VsdCA9IGVzY2FwZUNoYXJNYXAoY2gpO1xuICByZXR1cm4gbWFwcmVzdWx0ID9cbiAgICBtYXByZXN1bHQgOlxuICBjaCA9PT0gXCJ4XCIgP1xuICAgIG1ha2VVbmljb2RlQ2hhcih2YWxpZGF0ZVVuaWNvZGVFc2NhcGUodW5pY29kZTJQYXR0ZXJuLCByZWFkZXIsIGNoLCByZWFkMkNoYXJzKHJlYWRlcikpKSA6XG4gIGNoID09PSBcInVcIiA/XG4gICAgbWFrZVVuaWNvZGVDaGFyKHZhbGlkYXRlVW5pY29kZUVzY2FwZSh1bmljb2RlNFBhdHRlcm4sIHJlYWRlciwgY2gsIHJlYWQ0Q2hhcnMocmVhZGVyKSkpIDpcbiAgaXNOdW1lcmljKGNoKSA/XG4gICAgY2hhcihjaCkgOlxuICBcImVsc2VcIiA/XG4gICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIlwiICsgXCJVbmV4cGVjdGVkIHVuaWNvZGUgZXNjYXBlIFwiICsgXCJcXFxcXCIgKyBjaCkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5lc2NhcGVDaGFyID0gZXNjYXBlQ2hhcjtcblxudmFyIHJlYWRQYXN0ID0gZnVuY3Rpb24gcmVhZFBhc3QocHJlZGljYXRlLCByZWFkZXIpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKF8pIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBwcmVkaWNhdGUocGVla0NoYXIocmVhZGVyKSkgP1xuICAgICAgKF8gPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICBwZWVrQ2hhcihyZWFkZXIpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KSh2b2lkKDApKTtcbn07XG5leHBvcnRzLnJlYWRQYXN0ID0gcmVhZFBhc3Q7XG5cbnZhciByZWFkRGVsaW1pdGVkTGlzdCA9IGZ1bmN0aW9uIHJlYWREZWxpbWl0ZWRMaXN0KGRlbGltLCByZWFkZXIsIGlzUmVjdXJzaXZlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChmb3JtKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoID0gcmVhZFBhc3QoaXNXaGl0ZXNwYWNlLCByZWFkZXIpO1xuICAgICAgIShjaCkgP1xuICAgICAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiRU9GXCIpIDpcbiAgICAgICAgdm9pZCgwKTtcbiAgICAgIHJldHVybiBkZWxpbSA9PT0gY2ggP1xuICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmVhZENoYXIocmVhZGVyKTtcbiAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgfSkoKSA6XG4gICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgbWFjcm8gPSBtYWNyb3MoY2gpO1xuICAgICAgICAgIHJldHVybiBtYWNybyA/XG4gICAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBtYWNybyhyZWFkZXIsIHJlYWRDaGFyKHJlYWRlcikpO1xuICAgICAgICAgICAgICByZXR1cm4gKGZvcm0gPSByZXN1bHQgPT09IHJlYWRlciA/XG4gICAgICAgICAgICAgICAgZm9ybSA6XG4gICAgICAgICAgICAgICAgY29uaihmb3JtLCByZXN1bHQpLCBsb29wKTtcbiAgICAgICAgICAgIH0pKCkgOlxuICAgICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgbyA9IHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCBpc1JlY3Vyc2l2ZSk7XG4gICAgICAgICAgICAgIHJldHVybiAoZm9ybSA9IG8gPT09IHJlYWRlciA/XG4gICAgICAgICAgICAgICAgZm9ybSA6XG4gICAgICAgICAgICAgICAgY29uaihmb3JtLCBvKSwgbG9vcCk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9KSgpO1xuICAgIH0pKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKFtdKTtcbn07XG5leHBvcnRzLnJlYWREZWxpbWl0ZWRMaXN0ID0gcmVhZERlbGltaXRlZExpc3Q7XG5cbnZhciBub3RJbXBsZW1lbnRlZCA9IGZ1bmN0aW9uIG5vdEltcGxlbWVudGVkKHJlYWRlciwgY2gpIHtcbiAgcmV0dXJuIHJlYWRlckVycm9yKHJlYWRlciwgXCJcIiArIFwiUmVhZGVyIGZvciBcIiArIGNoICsgXCIgbm90IGltcGxlbWVudGVkIHlldFwiKTtcbn07XG5leHBvcnRzLm5vdEltcGxlbWVudGVkID0gbm90SW1wbGVtZW50ZWQ7XG5cbnZhciByZWFkRGlzcGF0Y2ggPSBmdW5jdGlvbiByZWFkRGlzcGF0Y2gocmVhZGVyLCBfKSB7XG4gIHZhciBjaCA9IHJlYWRDaGFyKHJlYWRlcik7XG4gIHZhciBkbSA9IGRpc3BhdGNoTWFjcm9zKGNoKTtcbiAgcmV0dXJuIGRtID9cbiAgICBkbShyZWFkZXIsIF8pIDpcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqZWN0ID0gbWF5YmVSZWFkVGFnZ2VkVHlwZShyZWFkZXIsIGNoKTtcbiAgICAgIHJldHVybiBvYmplY3QgP1xuICAgICAgICBvYmplY3QgOlxuICAgICAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiTm8gZGlzcGF0Y2ggbWFjcm8gZm9yIFwiLCBjaCk7XG4gICAgfSkoKTtcbn07XG5leHBvcnRzLnJlYWREaXNwYXRjaCA9IHJlYWREaXNwYXRjaDtcblxudmFyIHJlYWRVbm1hdGNoZWREZWxpbWl0ZXIgPSBmdW5jdGlvbiByZWFkVW5tYXRjaGVkRGVsaW1pdGVyKHJkciwgY2gpIHtcbiAgcmV0dXJuIHJlYWRlckVycm9yKHJkciwgXCJVbm1hY2hlZCBkZWxpbWl0ZXIgXCIsIGNoKTtcbn07XG5leHBvcnRzLnJlYWRVbm1hdGNoZWREZWxpbWl0ZXIgPSByZWFkVW5tYXRjaGVkRGVsaW1pdGVyO1xuXG52YXIgcmVhZExpc3QgPSBmdW5jdGlvbiByZWFkTGlzdChyZWFkZXIsIF8pIHtcbiAgdmFyIGZvcm0gPSByZWFkRGVsaW1pdGVkTGlzdChcIilcIiwgcmVhZGVyLCB0cnVlKTtcbiAgcmV0dXJuIHdpdGhNZXRhKGxpc3QuYXBwbHkobGlzdCwgZm9ybSksIG1ldGEoZm9ybSkpO1xufTtcbmV4cG9ydHMucmVhZExpc3QgPSByZWFkTGlzdDtcblxudmFyIHJlYWRDb21tZW50ID0gZnVuY3Rpb24gcmVhZENvbW1lbnQocmVhZGVyLCBfKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChidWZmZXIsIGNoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGlzTmlsKGNoKSkgfHwgKFwiXFxuXCIgPT09IGNoKSA/XG4gICAgICByZWFkZXIgfHwgKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiY29tbWVudFwiKSwgYnVmZmVyKSkgOlxuICAgIChcIlxcXFxcIiA9PT0gY2gpID9cbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgKGVzY2FwZUNoYXIoYnVmZmVyLCByZWFkZXIpKSwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgXCJlbHNlXCIgP1xuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyBjaCwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCByZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWRDb21tZW50ID0gcmVhZENvbW1lbnQ7XG5cbnZhciByZWFkVmVjdG9yID0gZnVuY3Rpb24gcmVhZFZlY3RvcihyZWFkZXIpIHtcbiAgcmV0dXJuIHJlYWREZWxpbWl0ZWRMaXN0KFwiXVwiLCByZWFkZXIsIHRydWUpO1xufTtcbmV4cG9ydHMucmVhZFZlY3RvciA9IHJlYWRWZWN0b3I7XG5cbnZhciByZWFkTWFwID0gZnVuY3Rpb24gcmVhZE1hcChyZWFkZXIpIHtcbiAgdmFyIGZvcm0gPSByZWFkRGVsaW1pdGVkTGlzdChcIn1cIiwgcmVhZGVyLCB0cnVlKTtcbiAgcmV0dXJuIGlzT2RkKGNvdW50KGZvcm0pKSA/XG4gICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIk1hcCBsaXRlcmFsIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBmb3Jtc1wiKSA6XG4gICAgd2l0aE1ldGEoZGljdGlvbmFyeS5hcHBseShkaWN0aW9uYXJ5LCBmb3JtKSwgbWV0YShmb3JtKSk7XG59O1xuZXhwb3J0cy5yZWFkTWFwID0gcmVhZE1hcDtcblxudmFyIHJlYWRTZXQgPSBmdW5jdGlvbiByZWFkU2V0KHJlYWRlciwgXykge1xuICB2YXIgZm9ybSA9IHJlYWREZWxpbWl0ZWRMaXN0KFwifVwiLCByZWFkZXIsIHRydWUpO1xuICByZXR1cm4gd2l0aE1ldGEoY29uY2F0KFtzeW1ib2wodm9pZCgwKSwgXCJzZXRcIildLCBmb3JtKSwgbWV0YShmb3JtKSk7XG59O1xuZXhwb3J0cy5yZWFkU2V0ID0gcmVhZFNldDtcblxudmFyIHJlYWROdW1iZXIgPSBmdW5jdGlvbiByZWFkTnVtYmVyKHJlYWRlciwgaW5pdGNoKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChidWZmZXIsIGNoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGlzTmlsKGNoKSkgfHwgKGlzV2hpdGVzcGFjZShjaCkpIHx8IChtYWNyb3MoY2gpKSA/XG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IG1hdGNoTnVtYmVyKGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBpc05pbChtYXRjaCkgP1xuICAgICAgICAgIHJlYWRlckVycm9yKHJlYWRlciwgXCJJbnZhbGlkIG51bWJlciBmb3JtYXQgW1wiLCBidWZmZXIsIFwiXVwiKSA6XG4gICAgICAgICAgbWF0Y2g7XG4gICAgICB9KSgpIDpcbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgKHJlYWRDaGFyKHJlYWRlcikpLCBjaCA9IHBlZWtDaGFyKHJlYWRlciksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShpbml0Y2gsIHBlZWtDaGFyKHJlYWRlcikpO1xufTtcbmV4cG9ydHMucmVhZE51bWJlciA9IHJlYWROdW1iZXI7XG5cbnZhciByZWFkU3RyaW5nID0gZnVuY3Rpb24gcmVhZFN0cmluZyhyZWFkZXIpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKGJ1ZmZlciwgY2gpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc05pbChjaCkgP1xuICAgICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIkVPRiB3aGlsZSByZWFkaW5nIHN0cmluZ1wiKSA6XG4gICAgXCJcXFxcXCIgPT09IGNoID9cbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgKGVzY2FwZUNoYXIoYnVmZmVyLCByZWFkZXIpKSwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgXCJcXFwiXCIgPT09IGNoID9cbiAgICAgIGJ1ZmZlciA6XG4gICAgXCJkZWZhdWx0XCIgP1xuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyBjaCwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCByZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWRTdHJpbmcgPSByZWFkU3RyaW5nO1xuXG52YXIgcmVhZFVucXVvdGUgPSBmdW5jdGlvbiByZWFkVW5xdW90ZShyZWFkZXIpIHtcbiAgdmFyIGNoID0gcGVla0NoYXIocmVhZGVyKTtcbiAgcmV0dXJuICEoY2gpID9cbiAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiRU9GIHdoaWxlIHJlYWRpbmcgY2hhcmFjdGVyXCIpIDpcbiAgY2ggPT09IFwiQFwiID9cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICByZWFkQ2hhcihyZWFkZXIpO1xuICAgICAgcmV0dXJuIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwidW5xdW90ZS1zcGxpY2luZ1wiKSwgcmVhZChyZWFkZXIsIHRydWUsIHZvaWQoMCksIHRydWUpKTtcbiAgICB9KSgpIDpcbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInVucXVvdGVcIiksIHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCB0cnVlKSk7XG59O1xuZXhwb3J0cy5yZWFkVW5xdW90ZSA9IHJlYWRVbnF1b3RlO1xuXG52YXIgc3BlY2lhbFN5bWJvbHMgPSBmdW5jdGlvbiBzcGVjaWFsU3ltYm9scyh0ZXh0LCBub3RGb3VuZCkge1xuICByZXR1cm4gdGV4dCA9PT0gXCJuaWxcIiA/XG4gICAgdm9pZCgwKSA6XG4gIHRleHQgPT09IFwidHJ1ZVwiID9cbiAgICB0cnVlIDpcbiAgdGV4dCA9PT0gXCJmYWxzZVwiID9cbiAgICBmYWxzZSA6XG4gIFwiZWxzZVwiID9cbiAgICBub3RGb3VuZCA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNwZWNpYWxTeW1ib2xzID0gc3BlY2lhbFN5bWJvbHM7XG5cbnZhciByZWFkU3ltYm9sID0gZnVuY3Rpb24gcmVhZFN5bWJvbChyZWFkZXIsIGluaXRjaCkge1xuICB2YXIgdG9rZW4gPSByZWFkVG9rZW4ocmVhZGVyLCBpbml0Y2gpO1xuICB2YXIgcGFydHMgPSBzcGxpdCh0b2tlbiwgXCIvXCIpO1xuICB2YXIgaGFzTnMgPSAoY291bnQocGFydHMpID4gMSkgJiYgKGNvdW50KHRva2VuKSA+IDEpO1xuICB2YXIgbnMgPSBmaXJzdChwYXJ0cyk7XG4gIHZhciBuYW1lID0gam9pbihcIi9cIiwgcmVzdChwYXJ0cykpO1xuICByZXR1cm4gaGFzTnMgP1xuICAgIHN5bWJvbChucywgbmFtZSkgOlxuICAgIHNwZWNpYWxTeW1ib2xzKHRva2VuLCBzeW1ib2wodG9rZW4pKTtcbn07XG5leHBvcnRzLnJlYWRTeW1ib2wgPSByZWFkU3ltYm9sO1xuXG52YXIgcmVhZEtleXdvcmQgPSBmdW5jdGlvbiByZWFkS2V5d29yZChyZWFkZXIsIGluaXRjaCkge1xuICB2YXIgdG9rZW4gPSByZWFkVG9rZW4ocmVhZGVyLCByZWFkQ2hhcihyZWFkZXIpKTtcbiAgdmFyIHBhcnRzID0gc3BsaXQodG9rZW4sIFwiL1wiKTtcbiAgdmFyIG5hbWUgPSBsYXN0KHBhcnRzKTtcbiAgdmFyIG5zID0gY291bnQocGFydHMpID4gMSA/XG4gICAgam9pbihcIi9cIiwgYnV0bGFzdChwYXJ0cykpIDpcbiAgICB2b2lkKDApO1xuICB2YXIgaXNzdWUgPSBsYXN0KG5zKSA9PT0gXCI6XCIgP1xuICAgIFwibmFtZXNwYWNlIGNhbid0IGVuZHMgd2l0aCBcXFwiOlxcXCJcIiA6XG4gIGxhc3QobmFtZSkgPT09IFwiOlwiID9cbiAgICBcIm5hbWUgY2FuJ3QgZW5kIHdpdGggXFxcIjpcXFwiXCIgOlxuICBsYXN0KG5hbWUpID09PSBcIi9cIiA/XG4gICAgXCJuYW1lIGNhbid0IGVuZCB3aXRoIFxcXCIvXFxcIlwiIDpcbiAgY291bnQoc3BsaXQodG9rZW4sIFwiOjpcIikpID4gMSA/XG4gICAgXCJuYW1lIGNhbid0IGNvbnRhaW4gXFxcIjo6XFxcIlwiIDpcbiAgICB2b2lkKDApO1xuICByZXR1cm4gaXNzdWUgP1xuICAgIHJlYWRlckVycm9yKHJlYWRlciwgXCJJbnZhbGlkIHRva2VuIChcIiwgaXNzdWUsIFwiKTogXCIsIHRva2VuKSA6XG4gICghKG5zKSkgJiYgKGZpcnN0KG5hbWUpID09PSBcIjpcIikgP1xuICAgIGtleXdvcmQocmVzdChuYW1lKSkgOlxuICAgIGtleXdvcmQobnMsIG5hbWUpO1xufTtcbmV4cG9ydHMucmVhZEtleXdvcmQgPSByZWFkS2V5d29yZDtcblxudmFyIGRlc3VnYXJNZXRhID0gZnVuY3Rpb24gZGVzdWdhck1ldGEoZikge1xuICByZXR1cm4gaXNLZXl3b3JkKGYpID9cbiAgICBkaWN0aW9uYXJ5KG5hbWUoZiksIHRydWUpIDpcbiAgaXNTeW1ib2woZikgP1xuICAgIHtcbiAgICAgIFwidGFnXCI6IGZcbiAgICB9IDpcbiAgaXNTdHJpbmcoZikgP1xuICAgIHtcbiAgICAgIFwidGFnXCI6IGZcbiAgICB9IDpcbiAgXCJlbHNlXCIgP1xuICAgIGYgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5kZXN1Z2FyTWV0YSA9IGRlc3VnYXJNZXRhO1xuXG52YXIgd3JhcHBpbmdSZWFkZXIgPSBmdW5jdGlvbiB3cmFwcGluZ1JlYWRlcihwcmVmaXgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJlYWRlcikge1xuICAgIHJldHVybiBsaXN0KHByZWZpeCwgcmVhZChyZWFkZXIsIHRydWUsIHZvaWQoMCksIHRydWUpKTtcbiAgfTtcbn07XG5leHBvcnRzLndyYXBwaW5nUmVhZGVyID0gd3JhcHBpbmdSZWFkZXI7XG5cbnZhciB0aHJvd2luZ1JlYWRlciA9IGZ1bmN0aW9uIHRocm93aW5nUmVhZGVyKG1zZykge1xuICByZXR1cm4gZnVuY3Rpb24ocmVhZGVyKSB7XG4gICAgcmV0dXJuIHJlYWRlckVycm9yKHJlYWRlciwgbXNnKTtcbiAgfTtcbn07XG5leHBvcnRzLnRocm93aW5nUmVhZGVyID0gdGhyb3dpbmdSZWFkZXI7XG5cbnZhciByZWFkTWV0YSA9IGZ1bmN0aW9uIHJlYWRNZXRhKHJlYWRlciwgXykge1xuICB2YXIgbWV0YWRhdGEgPSBkZXN1Z2FyTWV0YShyZWFkKHJlYWRlciwgdHJ1ZSwgdm9pZCgwKSwgdHJ1ZSkpO1xuICAhKGlzRGljdGlvbmFyeShtZXRhZGF0YSkpID9cbiAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiTWV0YWRhdGEgbXVzdCBiZSBTeW1ib2wsIEtleXdvcmQsIFN0cmluZyBvciBNYXBcIikgOlxuICAgIHZvaWQoMCk7XG4gIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm0gPSByZWFkKHJlYWRlciwgdHJ1ZSwgdm9pZCgwKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGZvcm0pID9cbiAgICAgIHdpdGhNZXRhKGZvcm0sIGNvbmoobWV0YWRhdGEsIG1ldGEoZm9ybSkpKSA6XG4gICAgICBmb3JtO1xuICB9KSgpO1xufTtcbmV4cG9ydHMucmVhZE1ldGEgPSByZWFkTWV0YTtcblxudmFyIHJlYWRSZWdleCA9IGZ1bmN0aW9uIHJlYWRSZWdleChyZWFkZXIpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKGJ1ZmZlciwgY2gpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc05pbChjaCkgP1xuICAgICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIkVPRiB3aGlsZSByZWFkaW5nIHN0cmluZ1wiKSA6XG4gICAgXCJcXFxcXCIgPT09IGNoID9cbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgY2ggKyAocmVhZENoYXIocmVhZGVyKSksIGNoID0gcmVhZENoYXIocmVhZGVyKSwgbG9vcCkgOlxuICAgIFwiXFxcIlwiID09PSBjaCA/XG4gICAgICByZVBhdHRlcm4oYnVmZmVyKSA6XG4gICAgXCJkZWZhdWx0XCIgP1xuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyBjaCwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCByZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWRSZWdleCA9IHJlYWRSZWdleDtcblxudmFyIHJlYWRQYXJhbSA9IGZ1bmN0aW9uIHJlYWRQYXJhbShyZWFkZXIsIGluaXRjaCkge1xuICB2YXIgZm9ybSA9IHJlYWRTeW1ib2wocmVhZGVyLCBpbml0Y2gpO1xuICByZXR1cm4gaXNFcXVhbChmb3JtLCBzeW1ib2woXCIlXCIpKSA/XG4gICAgc3ltYm9sKFwiJTFcIikgOlxuICAgIGZvcm07XG59O1xuZXhwb3J0cy5yZWFkUGFyYW0gPSByZWFkUGFyYW07XG5cbnZhciBpc1BhcmFtID0gZnVuY3Rpb24gaXNQYXJhbShmb3JtKSB7XG4gIHJldHVybiAoaXNTeW1ib2woZm9ybSkpICYmIChcIiVcIiA9PT0gZmlyc3QobmFtZShmb3JtKSkpO1xufTtcbmV4cG9ydHMuaXNQYXJhbSA9IGlzUGFyYW07XG5cbnZhciBsYW1iZGFQYXJhbXNIYXNoID0gZnVuY3Rpb24gbGFtYmRhUGFyYW1zSGFzaChmb3JtKSB7XG4gIHJldHVybiBpc1BhcmFtKGZvcm0pID9cbiAgICBkaWN0aW9uYXJ5KGZvcm0sIGZvcm0pIDpcbiAgKGlzRGljdGlvbmFyeShmb3JtKSkgfHwgKGlzVmVjdG9yKGZvcm0pKSB8fCAoaXNMaXN0KGZvcm0pKSA/XG4gICAgY29uai5hcHBseShjb25qLCBtYXAobGFtYmRhUGFyYW1zSGFzaCwgdmVjKGZvcm0pKSkgOlxuICBcImVsc2VcIiA/XG4gICAge30gOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5sYW1iZGFQYXJhbXNIYXNoID0gbGFtYmRhUGFyYW1zSGFzaDtcblxudmFyIGxhbWJkYVBhcmFtcyA9IGZ1bmN0aW9uIGxhbWJkYVBhcmFtcyhib2R5KSB7XG4gIHZhciBuYW1lcyA9IHNvcnQodmFscyhsYW1iZGFQYXJhbXNIYXNoKGJvZHkpKSk7XG4gIHZhciB2YXJpYWRpYyA9IGlzRXF1YWwoZmlyc3QobmFtZXMpLCBzeW1ib2woXCIlJlwiKSk7XG4gIHZhciBuID0gdmFyaWFkaWMgJiYgKGNvdW50KG5hbWVzKSA9PT0gMSkgP1xuICAgIDAgOlxuICAgIHBhcnNlSW50KHJlc3QobmFtZShsYXN0KG5hbWVzKSkpKTtcbiAgdmFyIHBhcmFtcyA9IChmdW5jdGlvbiBsb29wKG5hbWVzLCBpKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaSA8PSBuID9cbiAgICAgIChuYW1lcyA9IGNvbmoobmFtZXMsIHN5bWJvbChcIlwiICsgXCIlXCIgKyBpKSksIGkgPSBpbmMoaSksIGxvb3ApIDpcbiAgICAgIG5hbWVzO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgMSk7XG4gIHJldHVybiB2YXJpYWRpYyA/XG4gICAgY29uaihwYXJhbXMsIHN5bWJvbCh2b2lkKDApLCBcIiZcIiksIHN5bWJvbCh2b2lkKDApLCBcIiUmXCIpKSA6XG4gICAgbmFtZXM7XG59O1xuZXhwb3J0cy5sYW1iZGFQYXJhbXMgPSBsYW1iZGFQYXJhbXM7XG5cbnZhciByZWFkTGFtYmRhID0gZnVuY3Rpb24gcmVhZExhbWJkYShyZWFkZXIpIHtcbiAgdmFyIGJvZHkgPSByZWFkTGlzdChyZWFkZXIpO1xuICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJmblwiKSwgbGFtYmRhUGFyYW1zKGJvZHkpLCBib2R5KTtcbn07XG5leHBvcnRzLnJlYWRMYW1iZGEgPSByZWFkTGFtYmRhO1xuXG52YXIgcmVhZERpc2NhcmQgPSBmdW5jdGlvbiByZWFkRGlzY2FyZChyZWFkZXIsIF8pIHtcbiAgcmVhZChyZWFkZXIsIHRydWUsIHZvaWQoMCksIHRydWUpO1xuICByZXR1cm4gcmVhZGVyO1xufTtcbmV4cG9ydHMucmVhZERpc2NhcmQgPSByZWFkRGlzY2FyZDtcblxudmFyIG1hY3JvcyA9IGZ1bmN0aW9uIG1hY3JvcyhjKSB7XG4gIHJldHVybiBjID09PSBcIlxcXCJcIiA/XG4gICAgcmVhZFN0cmluZyA6XG4gIGMgPT09IFwiOlwiID9cbiAgICByZWFkS2V5d29yZCA6XG4gIGMgPT09IFwiO1wiID9cbiAgICByZWFkQ29tbWVudCA6XG4gIGMgPT09IFwiJ1wiID9cbiAgICB3cmFwcGluZ1JlYWRlcihzeW1ib2wodm9pZCgwKSwgXCJxdW90ZVwiKSkgOlxuICBjID09PSBcIkBcIiA/XG4gICAgd3JhcHBpbmdSZWFkZXIoc3ltYm9sKHZvaWQoMCksIFwiZGVyZWZcIikpIDpcbiAgYyA9PT0gXCJeXCIgP1xuICAgIHJlYWRNZXRhIDpcbiAgYyA9PT0gXCJgXCIgP1xuICAgIHdyYXBwaW5nUmVhZGVyKHN5bWJvbCh2b2lkKDApLCBcInN5bnRheC1xdW90ZVwiKSkgOlxuICBjID09PSBcIn5cIiA/XG4gICAgcmVhZFVucXVvdGUgOlxuICBjID09PSBcIihcIiA/XG4gICAgcmVhZExpc3QgOlxuICBjID09PSBcIilcIiA/XG4gICAgcmVhZFVubWF0Y2hlZERlbGltaXRlciA6XG4gIGMgPT09IFwiW1wiID9cbiAgICByZWFkVmVjdG9yIDpcbiAgYyA9PT0gXCJdXCIgP1xuICAgIHJlYWRVbm1hdGNoZWREZWxpbWl0ZXIgOlxuICBjID09PSBcIntcIiA/XG4gICAgcmVhZE1hcCA6XG4gIGMgPT09IFwifVwiID9cbiAgICByZWFkVW5tYXRjaGVkRGVsaW1pdGVyIDpcbiAgYyA9PT0gXCJcXFxcXCIgP1xuICAgIHJlYWRDaGFyIDpcbiAgYyA9PT0gXCIlXCIgP1xuICAgIHJlYWRQYXJhbSA6XG4gIGMgPT09IFwiI1wiID9cbiAgICByZWFkRGlzcGF0Y2ggOlxuICBcImVsc2VcIiA/XG4gICAgdm9pZCgwKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm1hY3JvcyA9IG1hY3JvcztcblxudmFyIGRpc3BhdGNoTWFjcm9zID0gZnVuY3Rpb24gZGlzcGF0Y2hNYWNyb3Mocykge1xuICByZXR1cm4gcyA9PT0gXCJ7XCIgP1xuICAgIHJlYWRTZXQgOlxuICBzID09PSBcIihcIiA/XG4gICAgcmVhZExhbWJkYSA6XG4gIHMgPT09IFwiPFwiID9cbiAgICB0aHJvd2luZ1JlYWRlcihcIlVucmVhZGFibGUgZm9ybVwiKSA6XG4gIHMgPT09IFwiXFxcIlwiID9cbiAgICByZWFkUmVnZXggOlxuICBzID09PSBcIiFcIiA/XG4gICAgcmVhZENvbW1lbnQgOlxuICBzID09PSBcIl9cIiA/XG4gICAgcmVhZERpc2NhcmQgOlxuICBcImVsc2VcIiA/XG4gICAgdm9pZCgwKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmRpc3BhdGNoTWFjcm9zID0gZGlzcGF0Y2hNYWNyb3M7XG5cbnZhciByZWFkRm9ybSA9IGZ1bmN0aW9uIHJlYWRGb3JtKHJlYWRlciwgY2gpIHtcbiAgdmFyIHN0YXJ0ID0ge1xuICAgIFwibGluZVwiOiAocmVhZGVyIHx8IDApW1wibGluZVwiXSxcbiAgICBcImNvbHVtblwiOiAocmVhZGVyIHx8IDApW1wiY29sdW1uXCJdXG4gIH07XG4gIHZhciByZWFkTWFjcm8gPSBtYWNyb3MoY2gpO1xuICB2YXIgZm9ybSA9IHJlYWRNYWNybyA/XG4gICAgcmVhZE1hY3JvKHJlYWRlciwgY2gpIDpcbiAgaXNOdW1iZXJMaXRlcmFsKHJlYWRlciwgY2gpID9cbiAgICByZWFkTnVtYmVyKHJlYWRlciwgY2gpIDpcbiAgXCJlbHNlXCIgP1xuICAgIHJlYWRTeW1ib2wocmVhZGVyLCBjaCkgOlxuICAgIHZvaWQoMCk7XG4gIHJldHVybiBmb3JtID09PSByZWFkZXIgP1xuICAgIGZvcm0gOlxuICAhKChpc1N0cmluZyhmb3JtKSkgfHwgKGlzTnVtYmVyKGZvcm0pKSB8fCAoaXNCb29sZWFuKGZvcm0pKSB8fCAoaXNOaWwoZm9ybSkpIHx8IChpc0tleXdvcmQoZm9ybSkpKSA/XG4gICAgd2l0aE1ldGEoZm9ybSwgY29uaih7XG4gICAgICBcInN0YXJ0XCI6IHN0YXJ0LFxuICAgICAgXCJlbmRcIjoge1xuICAgICAgICBcImxpbmVcIjogKHJlYWRlciB8fCAwKVtcImxpbmVcIl0sXG4gICAgICAgIFwiY29sdW1uXCI6IChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl1cbiAgICAgIH1cbiAgICB9LCBtZXRhKGZvcm0pKSkgOlxuICBcImVsc2VcIiA/XG4gICAgZm9ybSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnJlYWRGb3JtID0gcmVhZEZvcm07XG5cbnZhciByZWFkID0gZnVuY3Rpb24gcmVhZChyZWFkZXIsIGVvZklzRXJyb3IsIHNlbnRpbmVsLCBpc1JlY3Vyc2l2ZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoID0gcmVhZENoYXIocmVhZGVyKTtcbiAgICAgIHZhciBmb3JtID0gaXNOaWwoY2gpID9cbiAgICAgICAgZW9mSXNFcnJvciA/XG4gICAgICAgICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIkVPRlwiKSA6XG4gICAgICAgICAgc2VudGluZWwgOlxuICAgICAgaXNXaGl0ZXNwYWNlKGNoKSA/XG4gICAgICAgIHJlYWRlciA6XG4gICAgICBpc0NvbW1lbnRQcmVmaXgoY2gpID9cbiAgICAgICAgcmVhZChyZWFkQ29tbWVudChyZWFkZXIsIGNoKSwgZW9mSXNFcnJvciwgc2VudGluZWwsIGlzUmVjdXJzaXZlKSA6XG4gICAgICBcImVsc2VcIiA/XG4gICAgICAgIHJlYWRGb3JtKHJlYWRlciwgY2gpIDpcbiAgICAgICAgdm9pZCgwKTtcbiAgICAgIHJldHVybiBmb3JtID09PSByZWFkZXIgP1xuICAgICAgICAobG9vcCkgOlxuICAgICAgICBmb3JtO1xuICAgIH0pKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKCk7XG59O1xuZXhwb3J0cy5yZWFkID0gcmVhZDtcblxudmFyIHJlYWRfID0gZnVuY3Rpb24gcmVhZF8oc291cmNlLCB1cmkpIHtcbiAgdmFyIHJlYWRlciA9IHB1c2hCYWNrUmVhZGVyKHNvdXJjZSwgdXJpKTtcbiAgdmFyIGVvZiA9IGdlbnN5bSgpO1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoZm9ybXMsIGZvcm0pIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBmb3JtID09PSBlb2YgP1xuICAgICAgZm9ybXMgOlxuICAgICAgKGZvcm1zID0gY29uaihmb3JtcywgZm9ybSksIGZvcm0gPSByZWFkKHJlYWRlciwgZmFsc2UsIGVvZiwgZmFsc2UpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoW10sIHJlYWQocmVhZGVyLCBmYWxzZSwgZW9mLCBmYWxzZSkpO1xufTtcbmV4cG9ydHMucmVhZF8gPSByZWFkXztcblxudmFyIHJlYWRGcm9tU3RyaW5nID0gZnVuY3Rpb24gcmVhZEZyb21TdHJpbmcoc291cmNlLCB1cmkpIHtcbiAgdmFyIHJlYWRlciA9IHB1c2hCYWNrUmVhZGVyKHNvdXJjZSwgdXJpKTtcbiAgcmV0dXJuIHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCBmYWxzZSk7XG59O1xuZXhwb3J0cy5yZWFkRnJvbVN0cmluZyA9IHJlYWRGcm9tU3RyaW5nO1xuXG52YXIgcmVhZFV1aWQgPSBmdW5jdGlvbiByZWFkVXVpZCh1dWlkKSB7XG4gIHJldHVybiBpc1N0cmluZyh1dWlkKSA/XG4gICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJVVUlELlwiKSwgdXVpZCkgOlxuICAgIHJlYWRlckVycm9yKHZvaWQoMCksIFwiVVVJRCBsaXRlcmFsIGV4cGVjdHMgYSBzdHJpbmcgYXMgaXRzIHJlcHJlc2VudGF0aW9uLlwiKTtcbn07XG5cbnZhciByZWFkUXVldWUgPSBmdW5jdGlvbiByZWFkUXVldWUoaXRlbXMpIHtcbiAgcmV0dXJuIGlzVmVjdG9yKGl0ZW1zKSA/XG4gICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJQZXJzaXN0ZW50UXVldWUuXCIpLCBpdGVtcykgOlxuICAgIHJlYWRlckVycm9yKHZvaWQoMCksIFwiUXVldWUgbGl0ZXJhbCBleHBlY3RzIGEgdmVjdG9yIGZvciBpdHMgZWxlbWVudHMuXCIpO1xufTtcblxudmFyIF9fdGFnVGFibGVfXyA9IGRpY3Rpb25hcnkoXCJ1dWlkXCIsIHJlYWRVdWlkLCBcInF1ZXVlXCIsIHJlYWRRdWV1ZSk7XG5leHBvcnRzLl9fdGFnVGFibGVfXyA9IF9fdGFnVGFibGVfXztcblxudmFyIG1heWJlUmVhZFRhZ2dlZFR5cGUgPSBmdW5jdGlvbiBtYXliZVJlYWRUYWdnZWRUeXBlKHJlYWRlciwgaW5pdGNoKSB7XG4gIHZhciB0YWcgPSByZWFkU3ltYm9sKHJlYWRlciwgaW5pdGNoKTtcbiAgdmFyIHBmbiA9IChfX3RhZ1RhYmxlX18gfHwgMClbbmFtZSh0YWcpXTtcbiAgcmV0dXJuIHBmbiA/XG4gICAgcGZuKHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCBmYWxzZSkpIDpcbiAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiXCIgKyBcIkNvdWxkIG5vdCBmaW5kIHRhZyBwYXJzZXIgZm9yIFwiICsgKG5hbWUodGFnKSkgKyBcIiBpbiBcIiArIChcIlwiICsgKGtleXMoX190YWdUYWJsZV9fKSkpKTtcbn07XG5leHBvcnRzLm1heWJlUmVhZFRhZ2dlZFR5cGUgPSBtYXliZVJlYWRUYWdnZWRUeXBlXG4iLCJ2YXIgdmVjID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS52ZWM7XG52YXIgbWFwID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5tYXA7XG52YXIgbGFzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGFzdDtcbnZhciBjb3VudCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY291bnQ7XG52YXIgc2Vjb25kID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5zZWNvbmQ7XG52YXIgZmlyc3QgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmZpcnN0O1xudmFyIGlzU2VxdWVudGlhbCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNTZXF1ZW50aWFsO1xudmFyIGlzTGlzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNMaXN0OztcblxudmFyIGpvaW4gPSAocmVxdWlyZShcIi4vc3RyaW5nXCIpKS5qb2luO1xudmFyIHNwbGl0ID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkuc3BsaXQ7O1xuXG52YXIgaXNFcXVhbCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0VxdWFsO1xudmFyIHN1YnMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuc3VicztcbnZhciBpbmMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaW5jO1xudmFyIHN0ciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdHI7XG52YXIgaXNEaWN0aW9uYXJ5ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzRGljdGlvbmFyeTtcbnZhciBpc1JlUGF0dGVybiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1JlUGF0dGVybjtcbnZhciBpc0RhdGUgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNEYXRlO1xudmFyIGlzT2JqZWN0ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzT2JqZWN0O1xudmFyIGlzQm9vbGVhbiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0Jvb2xlYW47XG52YXIgaXNTdHJpbmcgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNTdHJpbmc7XG52YXIgaXNOdW1iZXIgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOdW1iZXI7XG52YXIgaXNWZWN0b3IgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNWZWN0b3I7XG52YXIgaXNOaWwgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOaWw7O1xuXG52YXIgd2l0aE1ldGEgPSBmdW5jdGlvbiB3aXRoTWV0YSh2YWx1ZSwgbWV0YWRhdGEpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBcIm1ldGFkYXRhXCIsIHtcbiAgICBcInZhbHVlXCI6IG1ldGFkYXRhLFxuICAgIFwiY29uZmlndXJhYmxlXCI6IHRydWVcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5leHBvcnRzLndpdGhNZXRhID0gd2l0aE1ldGE7XG5cbnZhciBtZXRhID0gZnVuY3Rpb24gbWV0YSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3QodmFsdWUpID9cbiAgICB2YWx1ZS5tZXRhZGF0YSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm1ldGEgPSBtZXRhO1xuXG52YXIgX19uc1NlcGFyYXRvcl9fID0gXCLigYRcIjtcbmV4cG9ydHMuX19uc1NlcGFyYXRvcl9fID0gX19uc1NlcGFyYXRvcl9fO1xuXG52YXIgU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKG5hbWVzcGFjZSwgbmFtZSkge1xuICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5TeW1ib2wudHlwZSA9IFwid2lzcC5zeW1ib2xcIjtcblxuU3ltYm9sLnByb3RvdHlwZS50eXBlID0gU3ltYm9sLnR5cGU7XG5cblN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5zID0gbmFtZXNwYWNlKHRoaXMpO1xuICByZXR1cm4gbnMgP1xuICAgIFwiXCIgKyBucyArIFwiL1wiICsgKG5hbWUodGhpcykpIDpcbiAgICBcIlwiICsgKG5hbWUodGhpcykpO1xufTtcblxudmFyIHN5bWJvbCA9IGZ1bmN0aW9uIHN5bWJvbChucywgaWQpIHtcbiAgcmV0dXJuIGlzU3ltYm9sKG5zKSA/XG4gICAgbnMgOlxuICBpc0tleXdvcmQobnMpID9cbiAgICBuZXcgU3ltYm9sKG5hbWVzcGFjZShucyksIG5hbWUobnMpKSA6XG4gIGlzTmlsKGlkKSA/XG4gICAgbmV3IFN5bWJvbCh2b2lkKDApLCBucykgOlxuICBcImVsc2VcIiA/XG4gICAgbmV3IFN5bWJvbChucywgaWQpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuc3ltYm9sID0gc3ltYm9sO1xuXG52YXIgaXNTeW1ib2wgPSBmdW5jdGlvbiBpc1N5bWJvbCh4KSB7XG4gIHJldHVybiB4ICYmIChTeW1ib2wudHlwZSA9PT0geC50eXBlKTtcbn07XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbnZhciBpc0tleXdvcmQgPSBmdW5jdGlvbiBpc0tleXdvcmQoeCkge1xuICByZXR1cm4gKGlzU3RyaW5nKHgpKSAmJiAoY291bnQoeCkgPiAxKSAmJiAoZmlyc3QoeCkgPT09IFwi6p6JXCIpO1xufTtcbmV4cG9ydHMuaXNLZXl3b3JkID0gaXNLZXl3b3JkO1xuXG52YXIga2V5d29yZCA9IGZ1bmN0aW9uIGtleXdvcmQobnMsIGlkKSB7XG4gIHJldHVybiBpc0tleXdvcmQobnMpID9cbiAgICBucyA6XG4gIGlzU3ltYm9sKG5zKSA/XG4gICAgXCJcIiArIFwi6p6JXCIgKyAobmFtZShucykpIDpcbiAgaXNOaWwoaWQpID9cbiAgICBcIlwiICsgXCLqnolcIiArIG5zIDpcbiAgaXNOaWwobnMpID9cbiAgICBcIlwiICsgXCLqnolcIiArIGlkIDpcbiAgXCJlbHNlXCIgP1xuICAgIFwiXCIgKyBcIuqeiVwiICsgbnMgKyBfX25zU2VwYXJhdG9yX18gKyBpZCA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmtleXdvcmQgPSBrZXl3b3JkO1xuXG52YXIga2V5d29yZE5hbWUgPSBmdW5jdGlvbiBrZXl3b3JkTmFtZSh2YWx1ZSkge1xuICByZXR1cm4gbGFzdChzcGxpdChzdWJzKHZhbHVlLCAxKSwgX19uc1NlcGFyYXRvcl9fKSk7XG59O1xuXG52YXIgbmFtZSA9IGZ1bmN0aW9uIG5hbWUodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/XG4gICAgdmFsdWUubmFtZSA6XG4gIGlzS2V5d29yZCh2YWx1ZSkgP1xuICAgIGtleXdvcmROYW1lKHZhbHVlKSA6XG4gIGlzU3RyaW5nKHZhbHVlKSA/XG4gICAgdmFsdWUgOlxuICBcImVsc2VcIiA/XG4gICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiXCIgKyBcIkRvZXNuJ3Qgc3VwcG9ydCBuYW1lOiBcIiArIHZhbHVlKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm5hbWUgPSBuYW1lO1xuXG52YXIga2V5d29yZE5hbWVzcGFjZSA9IGZ1bmN0aW9uIGtleXdvcmROYW1lc3BhY2UoeCkge1xuICB2YXIgcGFydHMgPSBzcGxpdChzdWJzKHgsIDEpLCBfX25zU2VwYXJhdG9yX18pO1xuICByZXR1cm4gY291bnQocGFydHMpID4gMSA/XG4gICAgKHBhcnRzIHx8IDApWzBdIDpcbiAgICB2b2lkKDApO1xufTtcblxudmFyIG5hbWVzcGFjZSA9IGZ1bmN0aW9uIG5hbWVzcGFjZSh4KSB7XG4gIHJldHVybiBpc1N5bWJvbCh4KSA/XG4gICAgeC5uYW1lc3BhY2UgOlxuICBpc0tleXdvcmQoeCkgP1xuICAgIGtleXdvcmROYW1lc3BhY2UoeCkgOlxuICBcImVsc2VcIiA/XG4gICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiXCIgKyBcIkRvZXNuJ3Qgc3VwcG9ydHMgbmFtZXNwYWNlOiBcIiArIHgpOyB9KSgpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXG52YXIgZ2Vuc3ltID0gZnVuY3Rpb24gZ2Vuc3ltKHByZWZpeCkge1xuICByZXR1cm4gc3ltYm9sKFwiXCIgKyAoaXNOaWwocHJlZml4KSA/XG4gICAgXCJHX19cIiA6XG4gICAgcHJlZml4KSArIChnZW5zeW0uYmFzZSA9IGdlbnN5bS5iYXNlICsgMSkpO1xufTtcbmV4cG9ydHMuZ2Vuc3ltID0gZ2Vuc3ltO1xuXG5nZW5zeW0uYmFzZSA9IDA7XG5cbnZhciBpc1VucXVvdGUgPSBmdW5jdGlvbiBpc1VucXVvdGUoZm9ybSkge1xuICByZXR1cm4gKGlzTGlzdChmb3JtKSkgJiYgKGlzRXF1YWwoZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcInVucXVvdGVcIikpKTtcbn07XG5leHBvcnRzLmlzVW5xdW90ZSA9IGlzVW5xdW90ZTtcblxudmFyIGlzVW5xdW90ZVNwbGljaW5nID0gZnVuY3Rpb24gaXNVbnF1b3RlU3BsaWNpbmcoZm9ybSkge1xuICByZXR1cm4gKGlzTGlzdChmb3JtKSkgJiYgKGlzRXF1YWwoZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcInVucXVvdGUtc3BsaWNpbmdcIikpKTtcbn07XG5leHBvcnRzLmlzVW5xdW90ZVNwbGljaW5nID0gaXNVbnF1b3RlU3BsaWNpbmc7XG5cbnZhciBpc1F1b3RlID0gZnVuY3Rpb24gaXNRdW90ZShmb3JtKSB7XG4gIHJldHVybiAoaXNMaXN0KGZvcm0pKSAmJiAoaXNFcXVhbChmaXJzdChmb3JtKSwgc3ltYm9sKHZvaWQoMCksIFwicXVvdGVcIikpKTtcbn07XG5leHBvcnRzLmlzUXVvdGUgPSBpc1F1b3RlO1xuXG52YXIgaXNTeW50YXhRdW90ZSA9IGZ1bmN0aW9uIGlzU3ludGF4UXVvdGUoZm9ybSkge1xuICByZXR1cm4gKGlzTGlzdChmb3JtKSkgJiYgKGlzRXF1YWwoZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcInN5bnRheC1xdW90ZVwiKSkpO1xufTtcbmV4cG9ydHMuaXNTeW50YXhRdW90ZSA9IGlzU3ludGF4UXVvdGU7XG5cbnZhciBub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUobiwgbGVuKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChucykge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGNvdW50KG5zKSA8IGxlbiA/XG4gICAgICAobnMgPSBcIlwiICsgXCIwXCIgKyBucywgbG9vcCkgOlxuICAgICAgbnM7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKFwiXCIgKyBuKTtcbn07XG5cbnZhciBxdW90ZVN0cmluZyA9IGZ1bmN0aW9uIHF1b3RlU3RyaW5nKHMpIHtcbiAgcyA9IGpvaW4oXCJcXFxcXFxcIlwiLCBzcGxpdChzLCBcIlxcXCJcIikpO1xuICBzID0gam9pbihcIlxcXFxcXFxcXCIsIHNwbGl0KHMsIFwiXFxcXFwiKSk7XG4gIHMgPSBqb2luKFwiXFxcXGJcIiwgc3BsaXQocywgXCJcYlwiKSk7XG4gIHMgPSBqb2luKFwiXFxcXGZcIiwgc3BsaXQocywgXCJcZlwiKSk7XG4gIHMgPSBqb2luKFwiXFxcXG5cIiwgc3BsaXQocywgXCJcXG5cIikpO1xuICBzID0gam9pbihcIlxcXFxyXCIsIHNwbGl0KHMsIFwiXFxyXCIpKTtcbiAgcyA9IGpvaW4oXCJcXFxcdFwiLCBzcGxpdChzLCBcIlxcdFwiKSk7XG4gIHJldHVybiBcIlwiICsgXCJcXFwiXCIgKyBzICsgXCJcXFwiXCI7XG59O1xuZXhwb3J0cy5xdW90ZVN0cmluZyA9IHF1b3RlU3RyaW5nO1xuXG52YXIgcHJTdHIgPSBmdW5jdGlvbiBwclN0cih4KSB7XG4gIHJldHVybiBpc05pbCh4KSA/XG4gICAgXCJuaWxcIiA6XG4gIGlzS2V5d29yZCh4KSA/XG4gICAgbmFtZXNwYWNlKHgpID9cbiAgICAgIFwiXCIgKyBcIjpcIiArIChuYW1lc3BhY2UoeCkpICsgXCIvXCIgKyAobmFtZSh4KSkgOlxuICAgICAgXCJcIiArIFwiOlwiICsgKG5hbWUoeCkpIDpcbiAgaXNTdHJpbmcoeCkgP1xuICAgIHF1b3RlU3RyaW5nKHgpIDpcbiAgaXNEYXRlKHgpID9cbiAgICBcIlwiICsgXCIjaW5zdCBcXFwiXCIgKyAoeC5nZXRVVENGdWxsWWVhcigpKSArIFwiLVwiICsgKG5vcm1hbGl6ZShpbmMoeC5nZXRVVENNb250aCgpKSwgMikpICsgXCItXCIgKyAobm9ybWFsaXplKHguZ2V0VVRDRGF0ZSgpLCAyKSkgKyBcIlRcIiArIChub3JtYWxpemUoeC5nZXRVVENIb3VycygpLCAyKSkgKyBcIjpcIiArIChub3JtYWxpemUoeC5nZXRVVENNaW51dGVzKCksIDIpKSArIFwiOlwiICsgKG5vcm1hbGl6ZSh4LmdldFVUQ1NlY29uZHMoKSwgMikpICsgXCIuXCIgKyAobm9ybWFsaXplKHguZ2V0VVRDTWlsbGlzZWNvbmRzKCksIDMpKSArIFwiLVwiICsgXCIwMDowMFxcXCJcIiA6XG4gIGlzVmVjdG9yKHgpID9cbiAgICBcIlwiICsgXCJbXCIgKyAoam9pbihcIiBcIiwgbWFwKHByU3RyLCB2ZWMoeCkpKSkgKyBcIl1cIiA6XG4gIGlzRGljdGlvbmFyeSh4KSA/XG4gICAgXCJcIiArIFwie1wiICsgKGpvaW4oXCIsIFwiLCBtYXAoZnVuY3Rpb24ocGFpcikge1xuICAgICAgcmV0dXJuIFwiXCIgKyAocHJTdHIoZmlyc3QocGFpcikpKSArIFwiIFwiICsgKHByU3RyKHNlY29uZChwYWlyKSkpO1xuICAgIH0sIHgpKSkgKyBcIn1cIiA6XG4gIGlzU2VxdWVudGlhbCh4KSA/XG4gICAgXCJcIiArIFwiKFwiICsgKGpvaW4oXCIgXCIsIG1hcChwclN0ciwgdmVjKHgpKSkpICsgXCIpXCIgOlxuICBpc1JlUGF0dGVybih4KSA/XG4gICAgXCJcIiArIFwiI1xcXCJcIiArIChqb2luKFwiXFxcXC9cIiwgc3BsaXQoeC5zb3VyY2UsIFwiL1wiKSkpICsgXCJcXFwiXCIgOlxuICBcImVsc2VcIiA/XG4gICAgXCJcIiArIHggOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5wclN0ciA9IHByU3RyXG4iLCJ2YXIgcmVhZEZyb21TdHJpbmcgPSAocmVxdWlyZShcIi4vcmVhZGVyXCIpKS5yZWFkRnJvbVN0cmluZzs7XG5cbnZhciBwclN0ciA9IChyZXF1aXJlKFwiLi9hc3RcIikpLnByU3RyO1xudmFyIGdlbnN5bSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmdlbnN5bTtcbnZhciBuYW1lID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkubmFtZTtcbnZhciBpc1N5bnRheFF1b3RlID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkuaXNTeW50YXhRdW90ZTtcbnZhciBpc1F1b3RlID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkuaXNRdW90ZTtcbnZhciBpc1VucXVvdGVTcGxpY2luZyA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzVW5xdW90ZVNwbGljaW5nO1xudmFyIGlzVW5xdW90ZSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzVW5xdW90ZTtcbnZhciBuYW1lc3BhY2UgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5uYW1lc3BhY2U7XG52YXIga2V5d29yZCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmtleXdvcmQ7XG52YXIgaXNLZXl3b3JkID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkuaXNLZXl3b3JkO1xudmFyIHN5bWJvbCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLnN5bWJvbDtcbnZhciBpc1N5bWJvbCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzU3ltYm9sO1xudmFyIHdpdGhNZXRhID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkud2l0aE1ldGE7XG52YXIgbWV0YSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLm1ldGE7O1xuXG52YXIgY29uY2F0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5jb25jYXQ7XG52YXIgdGFrZSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkudGFrZTtcbnZhciBmaWx0ZXIgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmZpbHRlcjtcbnZhciBtYXAgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLm1hcDtcbnZhciByZXBlYXQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnJlcGVhdDtcbnZhciBsYXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5sYXN0O1xudmFyIHZlYyA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkudmVjO1xudmFyIHJlZHVjZSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkucmVkdWNlO1xudmFyIHJldmVyc2UgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnJldmVyc2U7XG52YXIgY29uaiA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY29uajtcbnZhciBjb25zID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5jb25zO1xudmFyIHJlc3QgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnJlc3Q7XG52YXIgdGhpcmQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnRoaXJkO1xudmFyIHNlY29uZCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuc2Vjb25kO1xudmFyIGZpcnN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5maXJzdDtcbnZhciBsaXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5saXN0O1xudmFyIGlzTGlzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNMaXN0O1xudmFyIGNvdW50ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5jb3VudDtcbnZhciBpc0VtcHR5ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5pc0VtcHR5OztcblxudmFyIGlzU3RyaWN0RXF1YWwgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNTdHJpY3RFcXVhbDtcbnZhciBpc0VxdWFsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzRXF1YWw7XG52YXIgaW50ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmludDtcbnZhciBjaGFyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmNoYXI7XG52YXIgc3RyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnN0cjtcbnZhciBkZWMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuZGVjO1xudmFyIGluYyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pbmM7XG52YXIgaXNSZVBhdHRlcm4gPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNSZVBhdHRlcm47XG52YXIgaXNOaWwgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOaWw7XG52YXIgaXNGYWxzZSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0ZhbHNlO1xudmFyIGlzVHJ1ZSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1RydWU7XG52YXIgcmVGaW5kID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnJlRmluZDtcbnZhciBzdWJzID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnN1YnM7XG52YXIgaXNCb29sZWFuID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzQm9vbGVhbjtcbnZhciBpc1ZlY3RvciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1ZlY3RvcjtcbnZhciBpc051bWJlciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc051bWJlcjtcbnZhciBpc1N0cmluZyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1N0cmluZztcbnZhciBtYXBEaWN0aW9uYXJ5ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLm1hcERpY3Rpb25hcnk7XG52YXIgaXNDb250YWluc1ZlY3RvciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0NvbnRhaW5zVmVjdG9yO1xudmFyIHZhbHMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkudmFscztcbnZhciBrZXlzID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmtleXM7XG52YXIgbWVyZ2UgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkubWVyZ2U7XG52YXIgZGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kaWN0aW9uYXJ5O1xudmFyIGlzRGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0RpY3Rpb25hcnk7XG52YXIgaXNPZGQgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNPZGQ7O1xuXG52YXIgcmVwbGFjZSA9IChyZXF1aXJlKFwiLi9zdHJpbmdcIikpLnJlcGxhY2U7XG52YXIgdXBwZXJDYXNlID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkudXBwZXJDYXNlO1xudmFyIGpvaW4gPSAocmVxdWlyZShcIi4vc3RyaW5nXCIpKS5qb2luO1xudmFyIHNwbGl0ID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkuc3BsaXQ7O1xuXG52YXIgd3JpdGVCb29sZWFuID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlQm9vbGVhbjtcbnZhciB3cml0ZU51bWJlciA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZU51bWJlcjtcbnZhciB3cml0ZVN0cmluZyA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZVN0cmluZztcbnZhciB3cml0ZU51bWJlciA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZU51bWJlcjtcbnZhciB3cml0ZUNvbW1lbnQgPSAocmVxdWlyZShcIi4vYmFja2VuZC9qYXZhc2NyaXB0L3dyaXRlclwiKSkud3JpdGVDb21tZW50O1xudmFyIHdyaXRlTmlsID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlTmlsO1xudmFyIHdyaXRlU3ltYm9sID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlU3ltYm9sO1xudmFyIHdyaXRlS2V5d29yZCA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZUtleXdvcmQ7XG52YXIgd3JpdGVLZXl3b3JkUmVmZXJlbmNlID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlS2V5d29yZFJlZmVyZW5jZTtcbnZhciB3cml0ZVJlZmVyZW5jZSA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZVJlZmVyZW5jZTs7XG5cbnZhciBpc1NlbGZFdmFsdWF0aW5nID0gZnVuY3Rpb24gaXNTZWxmRXZhbHVhdGluZyhmb3JtKSB7XG4gIHJldHVybiAoaXNOdW1iZXIoZm9ybSkpIHx8ICgoaXNTdHJpbmcoZm9ybSkpICYmICghKGlzU3ltYm9sKGZvcm0pKSkgJiYgKCEoaXNLZXl3b3JkKGZvcm0pKSkpIHx8IChpc0Jvb2xlYW4oZm9ybSkpIHx8IChpc05pbChmb3JtKSkgfHwgKGlzUmVQYXR0ZXJuKGZvcm0pKTtcbn07XG5leHBvcnRzLmlzU2VsZkV2YWx1YXRpbmcgPSBpc1NlbGZFdmFsdWF0aW5nO1xuXG52YXIgX19tYWNyb3NfXyA9IHt9O1xuZXhwb3J0cy5fX21hY3Jvc19fID0gX19tYWNyb3NfXztcblxudmFyIGV4ZWN1dGVNYWNybyA9IGZ1bmN0aW9uIGV4ZWN1dGVNYWNybyhuYW1lLCBmb3JtKSB7XG4gIHJldHVybiAoX19tYWNyb3NfXyB8fCAwKVtuYW1lXS5hcHBseSgoX19tYWNyb3NfXyB8fCAwKVtuYW1lXSwgdmVjKGZvcm0pKTtcbn07XG5leHBvcnRzLmV4ZWN1dGVNYWNybyA9IGV4ZWN1dGVNYWNybztcblxudmFyIGluc3RhbGxNYWNybyA9IGZ1bmN0aW9uIGluc3RhbGxNYWNybyhuYW1lLCBtYWNyb0ZuKSB7XG4gIHJldHVybiAoX19tYWNyb3NfXyB8fCAwKVtuYW1lXSA9IG1hY3JvRm47XG59O1xuZXhwb3J0cy5pbnN0YWxsTWFjcm8gPSBpbnN0YWxsTWFjcm87XG5cbnZhciBpc01hY3JvID0gZnVuY3Rpb24gaXNNYWNybyhuYW1lKSB7XG4gIHJldHVybiAoaXNTeW1ib2wobmFtZSkpICYmICgoX19tYWNyb3NfXyB8fCAwKVtuYW1lXSkgJiYgdHJ1ZTtcbn07XG5leHBvcnRzLmlzTWFjcm8gPSBpc01hY3JvO1xuXG52YXIgbWFrZU1hY3JvID0gZnVuY3Rpb24gbWFrZU1hY3JvKHBhdHRlcm4sIGJvZHkpIHtcbiAgdmFyIG1hY3JvRm4gPSBjb25jYXQobGlzdChzeW1ib2wodm9pZCgwKSwgXCJmblwiKSwgcGF0dGVybiksIGJvZHkpO1xuICByZXR1cm4gZXZhbChcIlwiICsgXCIoXCIgKyAoY29tcGlsZShtYWNyb2V4cGFuZChtYWNyb0ZuKSkpICsgXCIpXCIpO1xufTtcbmV4cG9ydHMubWFrZU1hY3JvID0gbWFrZU1hY3JvO1xuXG5pbnN0YWxsTWFjcm8oc3ltYm9sKHZvaWQoMCksIFwiZGVmbWFjcm9cIiksIGZ1bmN0aW9uKG5hbWUsIHNpZ25hdHVyZSkge1xuICB2YXIgYm9keSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gIHJldHVybiBpbnN0YWxsTWFjcm8obmFtZSwgbWFrZU1hY3JvKHNpZ25hdHVyZSwgYm9keSkpO1xufSk7XG5cbnZhciBfX3NwZWNpYWxzX18gPSB7fTtcbmV4cG9ydHMuX19zcGVjaWFsc19fID0gX19zcGVjaWFsc19fO1xuXG52YXIgaW5zdGFsbFNwZWNpYWwgPSBmdW5jdGlvbiBpbnN0YWxsU3BlY2lhbChuYW1lLCBmLCB2YWxpZGF0b3IpIHtcbiAgcmV0dXJuIChfX3NwZWNpYWxzX18gfHwgMClbbmFtZV0gPSBmdW5jdGlvbihmb3JtKSB7XG4gICAgdmFsaWRhdG9yID9cbiAgICAgIHZhbGlkYXRvcihmb3JtKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHJldHVybiBmKHdpdGhNZXRhKHJlc3QoZm9ybSksIG1ldGEoZm9ybSkpKTtcbiAgfTtcbn07XG5leHBvcnRzLmluc3RhbGxTcGVjaWFsID0gaW5zdGFsbFNwZWNpYWw7XG5cbnZhciBpc1NwZWNpYWwgPSBmdW5jdGlvbiBpc1NwZWNpYWwobmFtZSkge1xuICByZXR1cm4gKGlzU3ltYm9sKG5hbWUpKSAmJiAoKF9fc3BlY2lhbHNfXyB8fCAwKVtuYW1lXSkgJiYgdHJ1ZTtcbn07XG5leHBvcnRzLmlzU3BlY2lhbCA9IGlzU3BlY2lhbDtcblxudmFyIGV4ZWN1dGVTcGVjaWFsID0gZnVuY3Rpb24gZXhlY3V0ZVNwZWNpYWwobmFtZSwgZm9ybSkge1xuICByZXR1cm4gKChfX3NwZWNpYWxzX18gfHwgMClbbmFtZV0pKGZvcm0pO1xufTtcbmV4cG9ydHMuZXhlY3V0ZVNwZWNpYWwgPSBleGVjdXRlU3BlY2lhbDtcblxudmFyIG9wdCA9IGZ1bmN0aW9uIG9wdChhcmd1bWVudCwgZmFsbGJhY2spIHtcbiAgcmV0dXJuIChpc05pbChhcmd1bWVudCkpIHx8IChpc0VtcHR5KGFyZ3VtZW50KSkgP1xuICAgIGZhbGxiYWNrIDpcbiAgICBmaXJzdChhcmd1bWVudCk7XG59O1xuZXhwb3J0cy5vcHQgPSBvcHQ7XG5cbnZhciBhcHBseUZvcm0gPSBmdW5jdGlvbiBhcHBseUZvcm0oZm5OYW1lLCBmb3JtLCBpc1F1b3RlZCkge1xuICByZXR1cm4gY29ucyhmbk5hbWUsIGlzUXVvdGVkID9cbiAgICBtYXAoZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwicXVvdGVcIiksIGUpO1xuICAgIH0sIGZvcm0pIDpcbiAgICBmb3JtLCBmb3JtKTtcbn07XG5leHBvcnRzLmFwcGx5Rm9ybSA9IGFwcGx5Rm9ybTtcblxudmFyIGFwcGx5VW5xdW90ZWRGb3JtID0gZnVuY3Rpb24gYXBwbHlVbnF1b3RlZEZvcm0oZm5OYW1lLCBmb3JtKSB7XG4gIHJldHVybiBjb25zKGZuTmFtZSwgbWFwKGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gaXNVbnF1b3RlKGUpID9cbiAgICAgIHNlY29uZChlKSA6XG4gICAgKGlzTGlzdChlKSkgJiYgKGlzS2V5d29yZChmaXJzdChlKSkpID9cbiAgICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic3ludGF4LXF1b3RlXCIpLCBzZWNvbmQoZSkpIDpcbiAgICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic3ludGF4LXF1b3RlXCIpLCBlKTtcbiAgfSwgZm9ybSkpO1xufTtcbmV4cG9ydHMuYXBwbHlVbnF1b3RlZEZvcm0gPSBhcHBseVVucXVvdGVkRm9ybTtcblxudmFyIHNwbGl0U3BsaWNlcyA9IGZ1bmN0aW9uIHNwbGl0U3BsaWNlcyhmb3JtLCBmbk5hbWUpIHtcbiAgdmFyIG1ha2VTcGxpY2UgPSBmdW5jdGlvbiBtYWtlU3BsaWNlKGZvcm0pIHtcbiAgICByZXR1cm4gKGlzU2VsZkV2YWx1YXRpbmcoZm9ybSkpIHx8IChpc1N5bWJvbChmb3JtKSkgP1xuICAgICAgYXBwbHlVbnF1b3RlZEZvcm0oZm5OYW1lLCBsaXN0KGZvcm0pKSA6XG4gICAgICBhcHBseVVucXVvdGVkRm9ybShmbk5hbWUsIGZvcm0pO1xuICB9O1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3Aobm9kZXMsIHNsaWNlcywgYWNjKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShub2RlcykgP1xuICAgICAgcmV2ZXJzZShpc0VtcHR5KGFjYykgP1xuICAgICAgICBzbGljZXMgOlxuICAgICAgICBjb25zKG1ha2VTcGxpY2UocmV2ZXJzZShhY2MpKSwgc2xpY2VzKSkgOlxuICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbm9kZSA9IGZpcnN0KG5vZGVzKTtcbiAgICAgICAgcmV0dXJuIGlzVW5xdW90ZVNwbGljaW5nKG5vZGUpID9cbiAgICAgICAgICAobm9kZXMgPSByZXN0KG5vZGVzKSwgc2xpY2VzID0gY29ucyhzZWNvbmQobm9kZSksIGlzRW1wdHkoYWNjKSA/XG4gICAgICAgICAgICBzbGljZXMgOlxuICAgICAgICAgICAgY29ucyhtYWtlU3BsaWNlKHJldmVyc2UoYWNjKSksIHNsaWNlcykpLCBhY2MgPSBsaXN0KCksIGxvb3ApIDpcbiAgICAgICAgICAobm9kZXMgPSByZXN0KG5vZGVzKSwgc2xpY2VzID0gc2xpY2VzLCBhY2MgPSBjb25zKG5vZGUsIGFjYyksIGxvb3ApO1xuICAgICAgfSkoKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoZm9ybSwgbGlzdCgpLCBsaXN0KCkpO1xufTtcbmV4cG9ydHMuc3BsaXRTcGxpY2VzID0gc3BsaXRTcGxpY2VzO1xuXG52YXIgc3ludGF4UXVvdGVTcGxpdCA9IGZ1bmN0aW9uIHN5bnRheFF1b3RlU3BsaXQoYXBwZW5kTmFtZSwgZm5OYW1lLCBmb3JtKSB7XG4gIHZhciBzbGljZXMgPSBzcGxpdFNwbGljZXMoZm9ybSwgZm5OYW1lKTtcbiAgdmFyIG4gPSBjb3VudChzbGljZXMpO1xuICByZXR1cm4gbiA9PT0gMCA/XG4gICAgbGlzdChmbk5hbWUpIDpcbiAgbiA9PT0gMSA/XG4gICAgZmlyc3Qoc2xpY2VzKSA6XG4gIFwiZGVmYXVsdFwiID9cbiAgICBhcHBseUZvcm0oYXBwZW5kTmFtZSwgc2xpY2VzKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnN5bnRheFF1b3RlU3BsaXQgPSBzeW50YXhRdW90ZVNwbGl0O1xuXG52YXIgY29tcGlsZU9iamVjdCA9IGZ1bmN0aW9uIGNvbXBpbGVPYmplY3QoZm9ybSwgaXNRdW90ZWQpIHtcbiAgcmV0dXJuIGlzS2V5d29yZChmb3JtKSA/XG4gICAgd3JpdGVLZXl3b3JkKGZvcm0pIDpcbiAgaXNTeW1ib2woZm9ybSkgP1xuICAgIHdyaXRlU3ltYm9sKGZvcm0pIDpcbiAgaXNOdW1iZXIoZm9ybSkgP1xuICAgIHdyaXRlTnVtYmVyKGZvcm0pIDpcbiAgaXNTdHJpbmcoZm9ybSkgP1xuICAgIHdyaXRlU3RyaW5nKGZvcm0pIDpcbiAgaXNCb29sZWFuKGZvcm0pID9cbiAgICB3cml0ZUJvb2xlYW4oZm9ybSkgOlxuICBpc05pbChmb3JtKSA/XG4gICAgd3JpdGVOaWwoZm9ybSkgOlxuICBpc1JlUGF0dGVybihmb3JtKSA/XG4gICAgY29tcGlsZVJlUGF0dGVybihmb3JtKSA6XG4gIGlzVmVjdG9yKGZvcm0pID9cbiAgICBjb21waWxlKGFwcGx5Rm9ybShzeW1ib2wodm9pZCgwKSwgXCJ2ZWN0b3JcIiksIGxpc3QuYXBwbHkobGlzdCwgZm9ybSksIGlzUXVvdGVkKSkgOlxuICBpc0xpc3QoZm9ybSkgP1xuICAgIGNvbXBpbGUoYXBwbHlGb3JtKHN5bWJvbCh2b2lkKDApLCBcImxpc3RcIiksIGZvcm0sIGlzUXVvdGVkKSkgOlxuICBpc0RpY3Rpb25hcnkoZm9ybSkgP1xuICAgIGNvbXBpbGVEaWN0aW9uYXJ5KGlzUXVvdGVkID9cbiAgICAgIG1hcERpY3Rpb25hcnkoZm9ybSwgZnVuY3Rpb24oeCkge1xuICAgICAgICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJxdW90ZVwiKSwgeCk7XG4gICAgICB9KSA6XG4gICAgICBmb3JtKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbXBpbGVPYmplY3QgPSBjb21waWxlT2JqZWN0O1xuXG52YXIgY29tcGlsZVN5bnRheFF1b3RlZFZlY3RvciA9IGZ1bmN0aW9uIGNvbXBpbGVTeW50YXhRdW90ZWRWZWN0b3IoZm9ybSkge1xuICB2YXIgY29uY2F0Rm9ybSA9IHN5bnRheFF1b3RlU3BsaXQoc3ltYm9sKHZvaWQoMCksIFwiY29uY2F0XCIpLCBzeW1ib2wodm9pZCgwKSwgXCJ2ZWN0b3JcIiksIGxpc3QuYXBwbHkobGlzdCwgZm9ybSkpO1xuICByZXR1cm4gY29tcGlsZShjb3VudChjb25jYXRGb3JtKSA+IDEgP1xuICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwidmVjXCIpLCBjb25jYXRGb3JtKSA6XG4gICAgY29uY2F0Rm9ybSk7XG59O1xuZXhwb3J0cy5jb21waWxlU3ludGF4UXVvdGVkVmVjdG9yID0gY29tcGlsZVN5bnRheFF1b3RlZFZlY3RvcjtcblxudmFyIGNvbXBpbGVTeW50YXhRdW90ZWQgPSBmdW5jdGlvbiBjb21waWxlU3ludGF4UXVvdGVkKGZvcm0pIHtcbiAgcmV0dXJuIGlzTGlzdChmb3JtKSA/XG4gICAgY29tcGlsZShzeW50YXhRdW90ZVNwbGl0KHN5bWJvbCh2b2lkKDApLCBcImNvbmNhdFwiKSwgc3ltYm9sKHZvaWQoMCksIFwibGlzdFwiKSwgZm9ybSkpIDpcbiAgaXNWZWN0b3IoZm9ybSkgP1xuICAgIGNvbXBpbGVTeW50YXhRdW90ZWRWZWN0b3IoZm9ybSkgOlxuICBcImVsc2VcIiA/XG4gICAgY29tcGlsZU9iamVjdChmb3JtKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbXBpbGVTeW50YXhRdW90ZWQgPSBjb21waWxlU3ludGF4UXVvdGVkO1xuXG52YXIgY29tcGlsZSA9IGZ1bmN0aW9uIGNvbXBpbGUoZm9ybSkge1xuICByZXR1cm4gaXNTZWxmRXZhbHVhdGluZyhmb3JtKSA/XG4gICAgY29tcGlsZU9iamVjdChmb3JtKSA6XG4gIGlzU3ltYm9sKGZvcm0pID9cbiAgICB3cml0ZVJlZmVyZW5jZShmb3JtKSA6XG4gIGlzS2V5d29yZChmb3JtKSA/XG4gICAgd3JpdGVLZXl3b3JkUmVmZXJlbmNlKGZvcm0pIDpcbiAgaXNWZWN0b3IoZm9ybSkgP1xuICAgIGNvbXBpbGVPYmplY3QoZm9ybSkgOlxuICBpc0RpY3Rpb25hcnkoZm9ybSkgP1xuICAgIGNvbXBpbGVPYmplY3QoZm9ybSkgOlxuICBpc0xpc3QoZm9ybSkgP1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBoZWFkID0gZmlyc3QoZm9ybSk7XG4gICAgICByZXR1cm4gaXNFbXB0eShmb3JtKSA/XG4gICAgICAgIGNvbXBpbGVPYmplY3QoZm9ybSwgdHJ1ZSkgOlxuICAgICAgaXNRdW90ZShmb3JtKSA/XG4gICAgICAgIGNvbXBpbGVPYmplY3Qoc2Vjb25kKGZvcm0pLCB0cnVlKSA6XG4gICAgICBpc1N5bnRheFF1b3RlKGZvcm0pID9cbiAgICAgICAgY29tcGlsZVN5bnRheFF1b3RlZChzZWNvbmQoZm9ybSkpIDpcbiAgICAgIGlzU3BlY2lhbChoZWFkKSA/XG4gICAgICAgIGV4ZWN1dGVTcGVjaWFsKGhlYWQsIGZvcm0pIDpcbiAgICAgIGlzS2V5d29yZChoZWFkKSA/XG4gICAgICAgIGNvbXBpbGUobGlzdChzeW1ib2wodm9pZCgwKSwgXCJnZXRcIiksIHNlY29uZChmb3JtKSwgaGVhZCkpIDpcbiAgICAgIFwiZWxzZVwiID9cbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAhKChpc1N5bWJvbChoZWFkKSkgfHwgKGlzTGlzdChoZWFkKSkpID9cbiAgICAgICAgICAgIChmdW5jdGlvbigpIHsgdGhyb3cgY29tcGlsZXJFcnJvcihmb3JtLCBcIlwiICsgXCJvcGVyYXRvciBpcyBub3QgYSBwcm9jZWR1cmU6IFwiICsgaGVhZCk7IH0pKCkgOlxuICAgICAgICAgICAgY29tcGlsZUludm9rZShmb3JtKTtcbiAgICAgICAgfSkoKSA6XG4gICAgICAgIHZvaWQoMCk7XG4gICAgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlO1xuXG52YXIgY29tcGlsZV8gPSBmdW5jdGlvbiBjb21waWxlXyhmb3Jtcykge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgZm9ybSkge1xuICAgIHJldHVybiBcIlwiICsgcmVzdWx0ICsgKGlzRW1wdHkocmVzdWx0KSA/XG4gICAgICBcIlwiIDpcbiAgICAgIFwiO1xcblxcblwiKSArIChjb21waWxlKGlzTGlzdChmb3JtKSA/XG4gICAgICB3aXRoTWV0YShtYWNyb2V4cGFuZChmb3JtKSwgY29uaih7XG4gICAgICAgIFwidG9wXCI6IHRydWVcbiAgICAgIH0sIG1ldGEoZm9ybSkpKSA6XG4gICAgICBmb3JtKSk7XG4gIH0sIFwiXCIsIGZvcm1zKTtcbn07XG5leHBvcnRzLmNvbXBpbGVfID0gY29tcGlsZV87XG5cbnZhciBjb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uIGNvbXBpbGVQcm9ncmFtKGZvcm1zKSB7XG4gIHJldHVybiByZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCBmb3JtKSB7XG4gICAgcmV0dXJuIFwiXCIgKyByZXN1bHQgKyAoaXNFbXB0eShyZXN1bHQpID9cbiAgICAgIFwiXCIgOlxuICAgICAgXCI7XFxuXFxuXCIpICsgKGNvbXBpbGUoaXNMaXN0KGZvcm0pID9cbiAgICAgIHdpdGhNZXRhKG1hY3JvZXhwYW5kKGZvcm0pLCBjb25qKHtcbiAgICAgICAgXCJ0b3BcIjogdHJ1ZVxuICAgICAgfSwgbWV0YShmb3JtKSkpIDpcbiAgICAgIGZvcm0pKTtcbiAgfSwgXCJcIiwgZm9ybXMpO1xufTtcbmV4cG9ydHMuY29tcGlsZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbTtcblxudmFyIG1hY3JvZXhwYW5kMSA9IGZ1bmN0aW9uIG1hY3JvZXhwYW5kMShmb3JtKSB7XG4gIHJldHVybiBpc0xpc3QoZm9ybSkgP1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcCA9IGZpcnN0KGZvcm0pO1xuICAgICAgdmFyIGlkID0gaXNTeW1ib2wob3ApID9cbiAgICAgICAgbmFtZShvcCkgOlxuICAgICAgICB2b2lkKDApO1xuICAgICAgcmV0dXJuIGlzU3BlY2lhbChvcCkgP1xuICAgICAgICBmb3JtIDpcbiAgICAgIGlzTWFjcm8ob3ApID9cbiAgICAgICAgZXhlY3V0ZU1hY3JvKG9wLCByZXN0KGZvcm0pKSA6XG4gICAgICAoaXNTeW1ib2wob3ApKSAmJiAoIShpZCA9PT0gXCIuXCIpKSA/XG4gICAgICAgIGZpcnN0KGlkKSA9PT0gXCIuXCIgP1xuICAgICAgICAgIGNvdW50KGZvcm0pIDwgMiA/XG4gICAgICAgICAgICAoZnVuY3Rpb24oKSB7IHRocm93IEVycm9yKFwiTWFsZm9ybWVkIG1lbWJlciBleHByZXNzaW9uLCBleHBlY3RpbmcgKC5tZW1iZXIgdGFyZ2V0IC4uLilcIik7IH0pKCkgOlxuICAgICAgICAgICAgY29ucyhzeW1ib2wodm9pZCgwKSwgXCIuXCIpLCBjb25zKHNlY29uZChmb3JtKSwgY29ucyhzeW1ib2woc3VicyhpZCwgMSkpLCByZXN0KHJlc3QoZm9ybSkpKSkpIDpcbiAgICAgICAgbGFzdChpZCkgPT09IFwiLlwiID9cbiAgICAgICAgICBjb25zKHN5bWJvbCh2b2lkKDApLCBcIm5ld1wiKSwgY29ucyhzeW1ib2woc3VicyhpZCwgMCwgZGVjKGNvdW50KGlkKSkpKSwgcmVzdChmb3JtKSkpIDpcbiAgICAgICAgICBmb3JtIDpcbiAgICAgIFwiZWxzZVwiID9cbiAgICAgICAgZm9ybSA6XG4gICAgICAgIHZvaWQoMCk7XG4gICAgfSkoKSA6XG4gICAgZm9ybTtcbn07XG5leHBvcnRzLm1hY3JvZXhwYW5kMSA9IG1hY3JvZXhwYW5kMTtcblxudmFyIG1hY3JvZXhwYW5kID0gZnVuY3Rpb24gbWFjcm9leHBhbmQoZm9ybSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3Aob3JpZ2luYWwsIGV4cGFuZGVkKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gb3JpZ2luYWwgPT09IGV4cGFuZGVkID9cbiAgICAgIG9yaWdpbmFsIDpcbiAgICAgIChvcmlnaW5hbCA9IGV4cGFuZGVkLCBleHBhbmRlZCA9IG1hY3JvZXhwYW5kMShleHBhbmRlZCksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShmb3JtLCBtYWNyb2V4cGFuZDEoZm9ybSkpO1xufTtcbmV4cG9ydHMubWFjcm9leHBhbmQgPSBtYWNyb2V4cGFuZDtcblxudmFyIF9saW5lQnJlYWtQYXR0ZXJuXyA9IC9cXG4oPz1bXlxcbl0pL207XG5leHBvcnRzLl9saW5lQnJlYWtQYXR0ZXJuXyA9IF9saW5lQnJlYWtQYXR0ZXJuXztcblxudmFyIGluZGVudCA9IGZ1bmN0aW9uIGluZGVudChjb2RlLCBpbmRlbnRhdGlvbikge1xuICByZXR1cm4gam9pbihpbmRlbnRhdGlvbiwgc3BsaXQoY29kZSwgX2xpbmVCcmVha1BhdHRlcm5fKSk7XG59O1xuZXhwb3J0cy5pbmRlbnQgPSBpbmRlbnQ7XG5cbnZhciBjb21waWxlVGVtcGxhdGUgPSBmdW5jdGlvbiBjb21waWxlVGVtcGxhdGUoZm9ybSkge1xuICB2YXIgaW5kZW50UGF0dGVybiA9IC9cXG4gKiQvO1xuICB2YXIgZ2V0SW5kZW50YXRpb24gPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgcmV0dXJuIChyZUZpbmQoaW5kZW50UGF0dGVybiwgY29kZSkpIHx8IFwiXFxuXCI7XG4gIH07XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChjb2RlLCBwYXJ0cywgdmFsdWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gY291bnQocGFydHMpID4gMSA/XG4gICAgICAoY29kZSA9IFwiXCIgKyBjb2RlICsgKGZpcnN0KHBhcnRzKSkgKyAoaW5kZW50KFwiXCIgKyAoZmlyc3QodmFsdWVzKSksIGdldEluZGVudGF0aW9uKGZpcnN0KHBhcnRzKSkpKSwgcGFydHMgPSByZXN0KHBhcnRzKSwgdmFsdWVzID0gcmVzdCh2YWx1ZXMpLCBsb29wKSA6XG4gICAgICBcIlwiICsgY29kZSArIChmaXJzdChwYXJ0cykpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCBzcGxpdChmaXJzdChmb3JtKSwgXCJ+e31cIiksIHJlc3QoZm9ybSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZVRlbXBsYXRlID0gY29tcGlsZVRlbXBsYXRlO1xuXG52YXIgY29tcGlsZURlZiA9IGZ1bmN0aW9uIGNvbXBpbGVEZWYoZm9ybSkge1xuICB2YXIgaWQgPSBmaXJzdChmb3JtKTtcbiAgdmFyIGlzRXhwb3J0ID0gKCgoKG1ldGEoZm9ybSkpIHx8IHt9KSB8fCAwKVtcInRvcFwiXSkgJiYgKCEoKCgobWV0YShpZCkpIHx8IHt9KSB8fCAwKVtcInByaXZhdGVcIl0pKTtcbiAgdmFyIGF0dHJpYnV0ZSA9IHN5bWJvbChuYW1lc3BhY2UoaWQpLCBcIlwiICsgXCItXCIgKyAobmFtZShpZCkpKTtcbiAgcmV0dXJuIGlzRXhwb3J0ID9cbiAgICBjb21waWxlVGVtcGxhdGUobGlzdChcInZhciB+e307XFxufnt9XCIsIGNvbXBpbGUoY29ucyhzeW1ib2wodm9pZCgwKSwgXCJzZXQhXCIpLCBmb3JtKSksIGNvbXBpbGUobGlzdChzeW1ib2wodm9pZCgwKSwgXCJzZXQhXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIi5cIiksIHN5bWJvbCh2b2lkKDApLCBcImV4cG9ydHNcIiksIGF0dHJpYnV0ZSksIGlkKSkpKSA6XG4gICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ2YXIgfnt9XCIsIGNvbXBpbGUoY29ucyhzeW1ib2wodm9pZCgwKSwgXCJzZXQhXCIpLCBmb3JtKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVEZWYgPSBjb21waWxlRGVmO1xuXG52YXIgY29tcGlsZUlmRWxzZSA9IGZ1bmN0aW9uIGNvbXBpbGVJZkVsc2UoZm9ybSkge1xuICB2YXIgY29uZGl0aW9uID0gbWFjcm9leHBhbmQoZmlyc3QoZm9ybSkpO1xuICB2YXIgdGhlbkV4cHJlc3Npb24gPSBtYWNyb2V4cGFuZChzZWNvbmQoZm9ybSkpO1xuICB2YXIgZWxzZUV4cHJlc3Npb24gPSBtYWNyb2V4cGFuZCh0aGlyZChmb3JtKSk7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdCgoaXNMaXN0KGVsc2VFeHByZXNzaW9uKSkgJiYgKGlzRXF1YWwoZmlyc3QoZWxzZUV4cHJlc3Npb24pLCBzeW1ib2wodm9pZCgwKSwgXCJpZlwiKSkpID9cbiAgICBcIn57fSA/XFxuICB+e30gOlxcbn57fVwiIDpcbiAgICBcIn57fSA/XFxuICB+e30gOlxcbiAgfnt9XCIsIGNvbXBpbGUoY29uZGl0aW9uKSwgY29tcGlsZSh0aGVuRXhwcmVzc2lvbiksIGNvbXBpbGUoZWxzZUV4cHJlc3Npb24pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlSWZFbHNlID0gY29tcGlsZUlmRWxzZTtcblxudmFyIGNvbXBpbGVEaWN0aW9uYXJ5ID0gZnVuY3Rpb24gY29tcGlsZURpY3Rpb25hcnkoZm9ybSkge1xuICB2YXIgYm9keSA9IChmdW5jdGlvbiBsb29wKGJvZHksIG5hbWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShuYW1lcykgP1xuICAgICAgYm9keSA6XG4gICAgICAoYm9keSA9IFwiXCIgKyAoaXNOaWwoYm9keSkgP1xuICAgICAgICBcIlwiIDpcbiAgICAgICAgXCJcIiArIGJvZHkgKyBcIixcXG5cIikgKyAoY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e306IH57fVwiLCBjb21waWxlKGZpcnN0KG5hbWVzKSksIGNvbXBpbGUobWFjcm9leHBhbmQoKGZvcm0gfHwgMClbZmlyc3QobmFtZXMpXSkpKSkpLCBuYW1lcyA9IHJlc3QobmFtZXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkodm9pZCgwKSwga2V5cyhmb3JtKSk7XG4gIHJldHVybiBpc05pbChib2R5KSA/XG4gICAgXCJ7fVwiIDpcbiAgICBjb21waWxlVGVtcGxhdGUobGlzdChcIntcXG4gIH57fVxcbn1cIiwgYm9keSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZURpY3Rpb25hcnkgPSBjb21waWxlRGljdGlvbmFyeTtcblxudmFyIGRlc3VnYXJGbk5hbWUgPSBmdW5jdGlvbiBkZXN1Z2FyRm5OYW1lKGZvcm0pIHtcbiAgcmV0dXJuIChpc1N5bWJvbChmaXJzdChmb3JtKSkpIHx8IChpc05pbChmaXJzdChmb3JtKSkpID9cbiAgICBmb3JtIDpcbiAgICBjb25zKHZvaWQoMCksIGZvcm0pO1xufTtcbmV4cG9ydHMuZGVzdWdhckZuTmFtZSA9IGRlc3VnYXJGbk5hbWU7XG5cbnZhciBkZXN1Z2FyRm5Eb2MgPSBmdW5jdGlvbiBkZXN1Z2FyRm5Eb2MoZm9ybSkge1xuICByZXR1cm4gKGlzU3RyaW5nKHNlY29uZChmb3JtKSkpIHx8IChpc05pbChzZWNvbmQoZm9ybSkpKSA/XG4gICAgZm9ybSA6XG4gICAgY29ucyhmaXJzdChmb3JtKSwgY29ucyh2b2lkKDApLCByZXN0KGZvcm0pKSk7XG59O1xuZXhwb3J0cy5kZXN1Z2FyRm5Eb2MgPSBkZXN1Z2FyRm5Eb2M7XG5cbnZhciBkZXN1Z2FyRm5BdHRycyA9IGZ1bmN0aW9uIGRlc3VnYXJGbkF0dHJzKGZvcm0pIHtcbiAgcmV0dXJuIChpc0RpY3Rpb25hcnkodGhpcmQoZm9ybSkpKSB8fCAoaXNOaWwodGhpcmQoZm9ybSkpKSA/XG4gICAgZm9ybSA6XG4gICAgY29ucyhmaXJzdChmb3JtKSwgY29ucyhzZWNvbmQoZm9ybSksIGNvbnModm9pZCgwKSwgcmVzdChyZXN0KGZvcm0pKSkpKTtcbn07XG5leHBvcnRzLmRlc3VnYXJGbkF0dHJzID0gZGVzdWdhckZuQXR0cnM7XG5cbnZhciBjb21waWxlRGVzdWdhcmVkRm4gPSBmdW5jdGlvbiBjb21waWxlRGVzdWdhcmVkRm4obmFtZSwgZG9jLCBhdHRycywgcGFyYW1zLCBib2R5KSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUoaXNOaWwobmFtZSkgP1xuICAgIGxpc3QoXCJmdW5jdGlvbih+e30pIHtcXG4gIH57fVxcbn1cIiwgam9pbihcIiwgXCIsIG1hcChjb21waWxlLCAocGFyYW1zIHx8IDApW1wibmFtZXNcIl0pKSwgY29tcGlsZUZuQm9keShtYXAobWFjcm9leHBhbmQsIGJvZHkpLCBwYXJhbXMpKSA6XG4gICAgbGlzdChcImZ1bmN0aW9uIH57fSh+e30pIHtcXG4gIH57fVxcbn1cIiwgY29tcGlsZShuYW1lKSwgam9pbihcIiwgXCIsIG1hcChjb21waWxlLCAocGFyYW1zIHx8IDApW1wibmFtZXNcIl0pKSwgY29tcGlsZUZuQm9keShtYXAobWFjcm9leHBhbmQsIGJvZHkpLCBwYXJhbXMpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlRGVzdWdhcmVkRm4gPSBjb21waWxlRGVzdWdhcmVkRm47XG5cbnZhciBjb21waWxlU3RhdGVtZW50cyA9IGZ1bmN0aW9uIGNvbXBpbGVTdGF0ZW1lbnRzKGZvcm0sIHByZWZpeCkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBleHByZXNzaW9uLCBleHByZXNzaW9ucykge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGlzRW1wdHkoZXhwcmVzc2lvbnMpID9cbiAgICAgIFwiXCIgKyByZXN1bHQgKyAoaXNOaWwocHJlZml4KSA/XG4gICAgICAgIFwiXCIgOlxuICAgICAgICBwcmVmaXgpICsgKGNvbXBpbGUobWFjcm9leHBhbmQoZXhwcmVzc2lvbikpKSArIFwiO1wiIDpcbiAgICAgIChyZXN1bHQgPSBcIlwiICsgcmVzdWx0ICsgKGNvbXBpbGUobWFjcm9leHBhbmQoZXhwcmVzc2lvbikpKSArIFwiO1xcblwiLCBleHByZXNzaW9uID0gZmlyc3QoZXhwcmVzc2lvbnMpLCBleHByZXNzaW9ucyA9IHJlc3QoZXhwcmVzc2lvbnMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoXCJcIiwgZmlyc3QoZm9ybSksIHJlc3QoZm9ybSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZVN0YXRlbWVudHMgPSBjb21waWxlU3RhdGVtZW50cztcblxudmFyIGNvbXBpbGVGbkJvZHkgPSBmdW5jdGlvbiBjb21waWxlRm5Cb2R5KGZvcm0sIHBhcmFtcykge1xuICByZXR1cm4gKGlzRGljdGlvbmFyeShwYXJhbXMpKSAmJiAoKHBhcmFtcyB8fCAwKVtcInJlc3RcIl0pID9cbiAgICBjb21waWxlU3RhdGVtZW50cyhjb25zKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCAocGFyYW1zIHx8IDApW1wicmVzdFwiXSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbFwiKSwgc3ltYm9sKHZvaWQoMCksIFwiYXJndW1lbnRzXCIpLCAocGFyYW1zIHx8IDApW1wiYXJpdHlcIl0pKSwgZm9ybSksIFwicmV0dXJuIFwiKSA6XG4gIChjb3VudChmb3JtKSA9PT0gMSkgJiYgKGlzTGlzdChmaXJzdChmb3JtKSkpICYmIChpc0VxdWFsKGZpcnN0KGZpcnN0KGZvcm0pKSwgc3ltYm9sKHZvaWQoMCksIFwiZG9cIikpKSA/XG4gICAgY29tcGlsZUZuQm9keShyZXN0KGZpcnN0KGZvcm0pKSwgcGFyYW1zKSA6XG4gICAgY29tcGlsZVN0YXRlbWVudHMoZm9ybSwgXCJyZXR1cm4gXCIpO1xufTtcbmV4cG9ydHMuY29tcGlsZUZuQm9keSA9IGNvbXBpbGVGbkJvZHk7XG5cbnZhciBkZXN1Z2FyUGFyYW1zID0gZnVuY3Rpb24gZGVzdWdhclBhcmFtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKG5hbWVzLCBwYXJhbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KHBhcmFtcykgP1xuICAgICAge1xuICAgICAgICBcIm5hbWVzXCI6IG5hbWVzLFxuICAgICAgICBcImFyaXR5XCI6IGNvdW50KG5hbWVzKSxcbiAgICAgICAgXCJyZXN0XCI6IHZvaWQoMClcbiAgICAgIH0gOlxuICAgIGlzRXF1YWwoZmlyc3QocGFyYW1zKSwgc3ltYm9sKHZvaWQoMCksIFwiJlwiKSkgP1xuICAgICAgaXNFcXVhbChjb3VudChwYXJhbXMpLCAxKSA/XG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVzXCI6IG5hbWVzLFxuICAgICAgICAgIFwiYXJpdHlcIjogY291bnQobmFtZXMpLFxuICAgICAgICAgIFwicmVzdFwiOiB2b2lkKDApXG4gICAgICAgIH0gOlxuICAgICAgaXNFcXVhbChjb3VudChwYXJhbXMpLCAyKSA/XG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVzXCI6IG5hbWVzLFxuICAgICAgICAgIFwiYXJpdHlcIjogY291bnQobmFtZXMpLFxuICAgICAgICAgIFwicmVzdFwiOiBzZWNvbmQocGFyYW1zKVxuICAgICAgICB9IDpcbiAgICAgIFwiZWxzZVwiID9cbiAgICAgICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBUeXBlRXJyb3IoXCJVbmV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFmdGVyICZcIik7IH0pKCkgOlxuICAgICAgICB2b2lkKDApIDpcbiAgICBcImVsc2VcIiA/XG4gICAgICAobmFtZXMgPSBjb25qKG5hbWVzLCBmaXJzdChwYXJhbXMpKSwgcGFyYW1zID0gcmVzdChwYXJhbXMpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgcGFyYW1zKTtcbn07XG5leHBvcnRzLmRlc3VnYXJQYXJhbXMgPSBkZXN1Z2FyUGFyYW1zO1xuXG52YXIgYW5hbHl6ZU92ZXJsb2FkZWRGbiA9IGZ1bmN0aW9uIGFuYWx5emVPdmVybG9hZGVkRm4obmFtZSwgZG9jLCBhdHRycywgb3ZlcmxvYWRzKSB7XG4gIHJldHVybiBtYXAoZnVuY3Rpb24ob3ZlcmxvYWQpIHtcbiAgICB2YXIgcGFyYW1zID0gZGVzdWdhclBhcmFtcyhmaXJzdChvdmVybG9hZCkpO1xuICAgIHJldHVybiB7XG4gICAgICBcInJlc3RcIjogKHBhcmFtcyB8fCAwKVtcInJlc3RcIl0sXG4gICAgICBcIm5hbWVzXCI6IChwYXJhbXMgfHwgMClbXCJuYW1lc1wiXSxcbiAgICAgIFwiYXJpdHlcIjogKHBhcmFtcyB8fCAwKVtcImFyaXR5XCJdLFxuICAgICAgXCJib2R5XCI6IHJlc3Qob3ZlcmxvYWQpXG4gICAgfTtcbiAgfSwgb3ZlcmxvYWRzKTtcbn07XG5leHBvcnRzLmFuYWx5emVPdmVybG9hZGVkRm4gPSBhbmFseXplT3ZlcmxvYWRlZEZuO1xuXG52YXIgY29tcGlsZU92ZXJsb2FkZWRGbiA9IGZ1bmN0aW9uIGNvbXBpbGVPdmVybG9hZGVkRm4obmFtZSwgZG9jLCBhdHRycywgb3ZlcmxvYWRzKSB7XG4gIHZhciBtZXRob2RzID0gYW5hbHl6ZU92ZXJsb2FkZWRGbihuYW1lLCBkb2MsIGF0dHJzLCBvdmVybG9hZHMpO1xuICB2YXIgZml4ZWRNZXRob2RzID0gZmlsdGVyKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIHJldHVybiAhKChtZXRob2QgfHwgMClbXCJyZXN0XCJdKTtcbiAgfSwgbWV0aG9kcyk7XG4gIHZhciB2YXJpYWRpYyA9IGZpcnN0KGZpbHRlcihmdW5jdGlvbihtZXRob2QpIHtcbiAgICByZXR1cm4gKG1ldGhvZCB8fCAwKVtcInJlc3RcIl07XG4gIH0sIG1ldGhvZHMpKTtcbiAgdmFyIG5hbWVzID0gcmVkdWNlKGZ1bmN0aW9uKG5hbWVzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gY291bnQobmFtZXMpID4gKHBhcmFtcyB8fCAwKVtcImFyaXR5XCJdID9cbiAgICAgIG5hbWVzIDpcbiAgICAgIChwYXJhbXMgfHwgMClbXCJuYW1lc1wiXTtcbiAgfSwgW10sIG1ldGhvZHMpO1xuICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJmblwiKSwgbmFtZSwgZG9jLCBhdHRycywgbmFtZXMsIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwicmF3KlwiKSwgY29tcGlsZVN3aXRjaChzeW1ib2wodm9pZCgwKSwgXCJhcmd1bWVudHMubGVuZ3RoXCIpLCBtYXAoZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgcmV0dXJuIGNvbnMoKG1ldGhvZCB8fCAwKVtcImFyaXR5XCJdLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJhdypcIiksIGNvbXBpbGVGbkJvZHkoY29uY2F0KGNvbXBpbGVSZWJpbmQobmFtZXMsIChtZXRob2QgfHwgMClbXCJuYW1lc1wiXSksIChtZXRob2QgfHwgMClbXCJib2R5XCJdKSkpKTtcbiAgfSwgZml4ZWRNZXRob2RzKSwgaXNOaWwodmFyaWFkaWMpID9cbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInRocm93XCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIkVycm9yXCIpLCBcIkludmFsaWQgYXJpdHlcIikpIDpcbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJhdypcIiksIGNvbXBpbGVGbkJvZHkoY29uY2F0KGNvbXBpbGVSZWJpbmQoY29ucyhsaXN0KHN5bWJvbCh2b2lkKDApLCBcIkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJhcmd1bWVudHNcIiksICh2YXJpYWRpYyB8fCAwKVtcImFyaXR5XCJdKSwgbmFtZXMpLCBjb25zKCh2YXJpYWRpYyB8fCAwKVtcInJlc3RcIl0sICh2YXJpYWRpYyB8fCAwKVtcIm5hbWVzXCJdKSksICh2YXJpYWRpYyB8fCAwKVtcImJvZHlcIl0pKSkpKSwgdm9pZCgwKSk7XG59O1xuZXhwb3J0cy5jb21waWxlT3ZlcmxvYWRlZEZuID0gY29tcGlsZU92ZXJsb2FkZWRGbjtcblxudmFyIGNvbXBpbGVSZWJpbmQgPSBmdW5jdGlvbiBjb21waWxlUmViaW5kKGJpbmRpbmdzLCBuYW1lcykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoZm9ybSwgYmluZGluZ3MsIG5hbWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShuYW1lcykgP1xuICAgICAgcmV2ZXJzZShmb3JtKSA6XG4gICAgICAoZm9ybSA9IGlzRXF1YWwoZmlyc3QobmFtZXMpLCBmaXJzdChiaW5kaW5ncykpID9cbiAgICAgICAgZm9ybSA6XG4gICAgICAgIGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIGZpcnN0KG5hbWVzKSwgZmlyc3QoYmluZGluZ3MpKSwgZm9ybSksIGJpbmRpbmdzID0gcmVzdChiaW5kaW5ncyksIG5hbWVzID0gcmVzdChuYW1lcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIGJpbmRpbmdzLCBuYW1lcyk7XG59O1xuZXhwb3J0cy5jb21waWxlUmViaW5kID0gY29tcGlsZVJlYmluZDtcblxudmFyIGNvbXBpbGVTd2l0Y2hDYXNlcyA9IGZ1bmN0aW9uIGNvbXBpbGVTd2l0Y2hDYXNlcyhjYXNlcykge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKGZvcm0sIGNhc2VFeHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIFwiXCIgKyBmb3JtICsgKGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiY2FzZSB+e306XFxuICB+e31cXG5cIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChjYXNlRXhwcmVzc2lvbikpKSwgY29tcGlsZShtYWNyb2V4cGFuZChyZXN0KGNhc2VFeHByZXNzaW9uKSkpKSkpO1xuICB9LCBcIlwiLCBjYXNlcyk7XG59O1xuZXhwb3J0cy5jb21waWxlU3dpdGNoQ2FzZXMgPSBjb21waWxlU3dpdGNoQ2FzZXM7XG5cbnZhciBjb21waWxlU3dpdGNoID0gZnVuY3Rpb24gY29tcGlsZVN3aXRjaCh2YWx1ZSwgY2FzZXMsIGRlZmF1bHRDYXNlKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcInN3aXRjaCAofnt9KSB7XFxuICB+e31cXG4gIGRlZmF1bHQ6XFxuICAgIH57fVxcbn1cIiwgY29tcGlsZShtYWNyb2V4cGFuZCh2YWx1ZSkpLCBjb21waWxlU3dpdGNoQ2FzZXMoY2FzZXMpLCBjb21waWxlKG1hY3JvZXhwYW5kKGRlZmF1bHRDYXNlKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVTd2l0Y2ggPSBjb21waWxlU3dpdGNoO1xuXG52YXIgY29tcGlsZUZuID0gZnVuY3Rpb24gY29tcGlsZUZuKGZvcm0pIHtcbiAgdmFyIHNpZ25hdHVyZSA9IGRlc3VnYXJGbkF0dHJzKGRlc3VnYXJGbkRvYyhkZXN1Z2FyRm5OYW1lKGZvcm0pKSk7XG4gIHZhciBuYW1lID0gZmlyc3Qoc2lnbmF0dXJlKTtcbiAgdmFyIGRvYyA9IHNlY29uZChzaWduYXR1cmUpO1xuICB2YXIgYXR0cnMgPSB0aGlyZChzaWduYXR1cmUpO1xuICByZXR1cm4gaXNWZWN0b3IodGhpcmQocmVzdChzaWduYXR1cmUpKSkgP1xuICAgIGNvbXBpbGVEZXN1Z2FyZWRGbihuYW1lLCBkb2MsIGF0dHJzLCBkZXN1Z2FyUGFyYW1zKHRoaXJkKHJlc3Qoc2lnbmF0dXJlKSkpLCByZXN0KHJlc3QocmVzdChyZXN0KHNpZ25hdHVyZSkpKSkpIDpcbiAgICBjb21waWxlKGNvbXBpbGVPdmVybG9hZGVkRm4obmFtZSwgZG9jLCBhdHRycywgcmVzdChyZXN0KHJlc3Qoc2lnbmF0dXJlKSkpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlRm4gPSBjb21waWxlRm47XG5cbnZhciBjb21waWxlSW52b2tlID0gZnVuY3Rpb24gY29tcGlsZUludm9rZShmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChpc0xpc3QoZmlyc3QoZm9ybSkpID9cbiAgICBcIih+e30pKH57fSlcIiA6XG4gICAgXCJ+e30ofnt9KVwiLCBjb21waWxlKGZpcnN0KGZvcm0pKSwgY29tcGlsZUdyb3VwKHJlc3QoZm9ybSkpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlSW52b2tlID0gY29tcGlsZUludm9rZTtcblxudmFyIGNvbXBpbGVHcm91cCA9IGZ1bmN0aW9uIGNvbXBpbGVHcm91cChmb3JtLCB3cmFwKSB7XG4gIHJldHVybiB3cmFwID9cbiAgICBcIlwiICsgXCIoXCIgKyAoY29tcGlsZUdyb3VwKGZvcm0pKSArIFwiKVwiIDpcbiAgICBqb2luKFwiLCBcIiwgdmVjKG1hcChjb21waWxlLCBtYXAobWFjcm9leHBhbmQsIGZvcm0pKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZUdyb3VwID0gY29tcGlsZUdyb3VwO1xuXG52YXIgY29tcGlsZURvID0gZnVuY3Rpb24gY29tcGlsZURvKGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGUobGlzdChjb25zKHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBjb25zKFtdLCBmb3JtKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVEbyA9IGNvbXBpbGVEbztcblxudmFyIGRlZmluZUJpbmRpbmdzID0gZnVuY3Rpb24gZGVmaW5lQmluZGluZ3MoZm9ybSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoZGVmcywgYmluZGluZ3MpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBjb3VudChiaW5kaW5ncykgPT09IDAgP1xuICAgICAgcmV2ZXJzZShkZWZzKSA6XG4gICAgICAoZGVmcyA9IGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIChiaW5kaW5ncyB8fCAwKVswXSwgKGJpbmRpbmdzIHx8IDApWzFdKSwgZGVmcyksIGJpbmRpbmdzID0gcmVzdChyZXN0KGJpbmRpbmdzKSksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIGZvcm0pO1xufTtcbmV4cG9ydHMuZGVmaW5lQmluZGluZ3MgPSBkZWZpbmVCaW5kaW5ncztcblxudmFyIGNvbXBpbGVUaHJvdyA9IGZ1bmN0aW9uIGNvbXBpbGVUaHJvdyhmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIihmdW5jdGlvbigpIHsgdGhyb3cgfnt9OyB9KSgpXCIsIGNvbXBpbGUobWFjcm9leHBhbmQoZmlyc3QoZm9ybSkpKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZVRocm93ID0gY29tcGlsZVRocm93O1xuXG52YXIgY29tcGlsZVNldCA9IGZ1bmN0aW9uIGNvbXBpbGVTZXQoZm9ybSkge1xuICByZXR1cm4gY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e30gPSB+e31cIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSkpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlU2V0ID0gY29tcGlsZVNldDtcblxudmFyIGNvbXBpbGVWZWN0b3IgPSBmdW5jdGlvbiBjb21waWxlVmVjdG9yKGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiW357fV1cIiwgY29tcGlsZUdyb3VwKGZvcm0pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlVmVjdG9yID0gY29tcGlsZVZlY3RvcjtcblxudmFyIGNvbXBpbGVUcnkgPSBmdW5jdGlvbiBjb21waWxlVHJ5KGZvcm0pIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHRyeUV4cHJzLCBjYXRjaEV4cHJzLCBmaW5hbGx5RXhwcnMsIGV4cHJzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShleHBycykgP1xuICAgICAgaXNFbXB0eShjYXRjaEV4cHJzKSA/XG4gICAgICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiKGZ1bmN0aW9uKCkge1xcbnRyeSB7XFxuICB+e31cXG59IGZpbmFsbHkge1xcbiAgfnt9XFxufX0pKClcIiwgY29tcGlsZUZuQm9keSh0cnlFeHBycyksIGNvbXBpbGVGbkJvZHkoZmluYWxseUV4cHJzKSkpIDpcbiAgICAgIGlzRW1wdHkoZmluYWxseUV4cHJzKSA/XG4gICAgICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiKGZ1bmN0aW9uKCkge1xcbnRyeSB7XFxuICB+e31cXG59IGNhdGNoICh+e30pIHtcXG4gIH57fVxcbn19KSgpXCIsIGNvbXBpbGVGbkJvZHkodHJ5RXhwcnMpLCBjb21waWxlKGZpcnN0KGNhdGNoRXhwcnMpKSwgY29tcGlsZUZuQm9keShyZXN0KGNhdGNoRXhwcnMpKSkpIDpcbiAgICAgICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCIoZnVuY3Rpb24oKSB7XFxudHJ5IHtcXG4gIH57fVxcbn0gY2F0Y2ggKH57fSkge1xcbiAgfnt9XFxufSBmaW5hbGx5IHtcXG4gIH57fVxcbn19KSgpXCIsIGNvbXBpbGVGbkJvZHkodHJ5RXhwcnMpLCBjb21waWxlKGZpcnN0KGNhdGNoRXhwcnMpKSwgY29tcGlsZUZuQm9keShyZXN0KGNhdGNoRXhwcnMpKSwgY29tcGlsZUZuQm9keShmaW5hbGx5RXhwcnMpKSkgOlxuICAgIGlzRXF1YWwoZmlyc3QoZmlyc3QoZXhwcnMpKSwgc3ltYm9sKHZvaWQoMCksIFwiY2F0Y2hcIikpID9cbiAgICAgICh0cnlFeHBycyA9IHRyeUV4cHJzLCBjYXRjaEV4cHJzID0gcmVzdChmaXJzdChleHBycykpLCBmaW5hbGx5RXhwcnMgPSBmaW5hbGx5RXhwcnMsIGV4cHJzID0gcmVzdChleHBycyksIGxvb3ApIDpcbiAgICBpc0VxdWFsKGZpcnN0KGZpcnN0KGV4cHJzKSksIHN5bWJvbCh2b2lkKDApLCBcImZpbmFsbHlcIikpID9cbiAgICAgICh0cnlFeHBycyA9IHRyeUV4cHJzLCBjYXRjaEV4cHJzID0gY2F0Y2hFeHBycywgZmluYWxseUV4cHJzID0gcmVzdChmaXJzdChleHBycykpLCBleHBycyA9IHJlc3QoZXhwcnMpLCBsb29wKSA6XG4gICAgICAodHJ5RXhwcnMgPSBjb25zKGZpcnN0KGV4cHJzKSwgdHJ5RXhwcnMpLCBjYXRjaEV4cHJzID0gY2F0Y2hFeHBycywgZmluYWxseUV4cHJzID0gZmluYWxseUV4cHJzLCBleHBycyA9IHJlc3QoZXhwcnMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkobGlzdCgpLCBsaXN0KCksIGxpc3QoKSwgcmV2ZXJzZShmb3JtKSk7XG59O1xuZXhwb3J0cy5jb21waWxlVHJ5ID0gY29tcGlsZVRyeTtcblxudmFyIGNvbXBpbGVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGNvbXBpbGVQcm9wZXJ0eShmb3JtKSB7XG4gIHJldHVybiAobmFtZShzZWNvbmQoZm9ybSkpKVswXSA9PT0gXCItXCIgP1xuICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KGlzTGlzdChmaXJzdChmb3JtKSkgP1xuICAgICAgXCIofnt9KS5+e31cIiA6XG4gICAgICBcIn57fS5+e31cIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKHN5bWJvbChzdWJzKG5hbWUoc2Vjb25kKGZvcm0pKSwgMSkpKSkpKSA6XG4gICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e30ufnt9KH57fSlcIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSkpLCBjb21waWxlR3JvdXAocmVzdChyZXN0KGZvcm0pKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVQcm9wZXJ0eSA9IGNvbXBpbGVQcm9wZXJ0eTtcblxudmFyIGNvbXBpbGVBcHBseSA9IGZ1bmN0aW9uIGNvbXBpbGVBcHBseShmb3JtKSB7XG4gIHJldHVybiBjb21waWxlKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiLlwiKSwgZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcImFwcGx5XCIpLCBmaXJzdChmb3JtKSwgc2Vjb25kKGZvcm0pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlQXBwbHkgPSBjb21waWxlQXBwbHk7XG5cbnZhciBjb21waWxlTmV3ID0gZnVuY3Rpb24gY29tcGlsZU5ldyhmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIm5ldyB+e31cIiwgY29tcGlsZShmb3JtKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZU5ldyA9IGNvbXBpbGVOZXc7XG5cbnZhciBjb21waWxlQWdldCA9IGZ1bmN0aW9uIGNvbXBpbGVBZ2V0KGZvcm0pIHtcbiAgdmFyIHRhcmdldCA9IG1hY3JvZXhwYW5kKGZpcnN0KGZvcm0pKTtcbiAgdmFyIGF0dHJpYnV0ZSA9IG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSk7XG4gIHZhciBub3RGb3VuZCA9IHRoaXJkKGZvcm0pO1xuICB2YXIgdGVtcGxhdGUgPSBpc0xpc3QodGFyZ2V0KSA/XG4gICAgXCIofnt9KVt+e31dXCIgOlxuICAgIFwifnt9W357fV1cIjtcbiAgcmV0dXJuIG5vdEZvdW5kID9cbiAgICBjb21waWxlKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwib3JcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZ2V0XCIpLCBmaXJzdChmb3JtKSwgc2Vjb25kKGZvcm0pKSwgbWFjcm9leHBhbmQobm90Rm91bmQpKSkgOlxuICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KHRlbXBsYXRlLCBjb21waWxlKHRhcmdldCksIGNvbXBpbGUoYXR0cmlidXRlKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZUFnZXQgPSBjb21waWxlQWdldDtcblxudmFyIGNvbXBpbGVHZXQgPSBmdW5jdGlvbiBjb21waWxlR2V0KGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVBZ2V0KGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJvclwiKSwgZmlyc3QoZm9ybSksIDApLCByZXN0KGZvcm0pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlR2V0ID0gY29tcGlsZUdldDtcblxudmFyIGNvbXBpbGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNvbXBpbGVJbnN0YW5jZShmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIn57fSBpbnN0YW5jZW9mIH57fVwiLCBjb21waWxlKG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKGZpcnN0KGZvcm0pKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVJbnN0YW5jZSA9IGNvbXBpbGVJbnN0YW5jZTtcblxudmFyIGNvbXBpbGVOb3QgPSBmdW5jdGlvbiBjb21waWxlTm90KGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiISh+e30pXCIsIGNvbXBpbGUobWFjcm9leHBhbmQoZmlyc3QoZm9ybSkpKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZU5vdCA9IGNvbXBpbGVOb3Q7XG5cbnZhciBjb21waWxlTG9vcCA9IGZ1bmN0aW9uIGNvbXBpbGVMb29wKGZvcm0pIHtcbiAgdmFyIGJpbmRpbmdzID0gKGZ1bmN0aW9uIGxvb3AobmFtZXMsIHZhbHVlcywgdG9rZW5zKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eSh0b2tlbnMpID9cbiAgICAgIHtcbiAgICAgICAgXCJuYW1lc1wiOiBuYW1lcyxcbiAgICAgICAgXCJ2YWx1ZXNcIjogdmFsdWVzXG4gICAgICB9IDpcbiAgICAgIChuYW1lcyA9IGNvbmoobmFtZXMsIGZpcnN0KHRva2VucykpLCB2YWx1ZXMgPSBjb25qKHZhbHVlcywgc2Vjb25kKHRva2VucykpLCB0b2tlbnMgPSByZXN0KHJlc3QodG9rZW5zKSksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgW10sIGZpcnN0KGZvcm0pKTtcbiAgdmFyIG5hbWVzID0gKGJpbmRpbmdzIHx8IDApW1wibmFtZXNcIl07XG4gIHZhciB2YWx1ZXMgPSAoYmluZGluZ3MgfHwgMClbXCJ2YWx1ZXNcIl07XG4gIHZhciBib2R5ID0gcmVzdChmb3JtKTtcbiAgcmV0dXJuIGNvbXBpbGUoY29ucyhjb25zKHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBjb25zKHN5bWJvbCh2b2lkKDApLCBcImxvb3BcIiksIGNvbnMobmFtZXMsIGNvbXBpbGVSZWN1cihuYW1lcywgYm9keSkpKSksIGxpc3QuYXBwbHkobGlzdCwgdmFsdWVzKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZUxvb3AgPSBjb21waWxlTG9vcDtcblxudmFyIHJlYmluZEJpbmRpbmdzID0gZnVuY3Rpb24gcmViaW5kQmluZGluZ3MobmFtZXMsIHZhbHVlcykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBuYW1lcywgdmFsdWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShuYW1lcykgP1xuICAgICAgcmV2ZXJzZShyZXN1bHQpIDpcbiAgICAgIChyZXN1bHQgPSBjb25zKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgZmlyc3QobmFtZXMpLCBmaXJzdCh2YWx1ZXMpKSwgcmVzdWx0KSwgbmFtZXMgPSByZXN0KG5hbWVzKSwgdmFsdWVzID0gcmVzdCh2YWx1ZXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkobGlzdCgpLCBuYW1lcywgdmFsdWVzKTtcbn07XG5leHBvcnRzLnJlYmluZEJpbmRpbmdzID0gcmViaW5kQmluZGluZ3M7XG5cbnZhciBleHBhbmRSZWN1ciA9IGZ1bmN0aW9uIGV4cGFuZFJlY3VyKG5hbWVzLCBib2R5KSB7XG4gIHJldHVybiBtYXAoZnVuY3Rpb24oZm9ybSkge1xuICAgIHJldHVybiBpc0xpc3QoZm9ybSkgP1xuICAgICAgaXNFcXVhbChmaXJzdChmb3JtKSwgc3ltYm9sKHZvaWQoMCksIFwicmVjdXJcIikpID9cbiAgICAgICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJyYXcqXCIpLCBjb21waWxlR3JvdXAoY29uY2F0KHJlYmluZEJpbmRpbmdzKG5hbWVzLCByZXN0KGZvcm0pKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJsb29wXCIpKSksIHRydWUpKSA6XG4gICAgICAgIGV4cGFuZFJlY3VyKG5hbWVzLCBmb3JtKSA6XG4gICAgICBmb3JtO1xuICB9LCBib2R5KTtcbn07XG5leHBvcnRzLmV4cGFuZFJlY3VyID0gZXhwYW5kUmVjdXI7XG5cbnZhciBjb21waWxlUmVjdXIgPSBmdW5jdGlvbiBjb21waWxlUmVjdXIobmFtZXMsIGJvZHkpIHtcbiAgcmV0dXJuIGxpc3QobGlzdChzeW1ib2wodm9pZCgwKSwgXCJyYXcqXCIpLCBjb21waWxlVGVtcGxhdGUobGlzdChcInZhciByZWN1ciA9IGxvb3A7XFxud2hpbGUgKHJlY3VyID09PSBsb29wKSB7XFxuICByZWN1ciA9IH57fVxcbn1cIiwgY29tcGlsZVN0YXRlbWVudHMoZXhwYW5kUmVjdXIobmFtZXMsIGJvZHkpKSkpKSwgc3ltYm9sKHZvaWQoMCksIFwicmVjdXJcIikpO1xufTtcbmV4cG9ydHMuY29tcGlsZVJlY3VyID0gY29tcGlsZVJlY3VyO1xuXG52YXIgY29tcGlsZVJhdyA9IGZ1bmN0aW9uIGNvbXBpbGVSYXcoZm9ybSkge1xuICByZXR1cm4gZmlyc3QoZm9ybSk7XG59O1xuZXhwb3J0cy5jb21waWxlUmF3ID0gY29tcGlsZVJhdztcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgY29tcGlsZVNldCk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImdldFwiKSwgY29tcGlsZUdldCk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImFnZXRcIiksIGNvbXBpbGVBZ2V0KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCBjb21waWxlRGVmKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiaWZcIiksIGNvbXBpbGVJZkVsc2UpO1xuXG5pbnN0YWxsU3BlY2lhbChzeW1ib2wodm9pZCgwKSwgXCJkb1wiKSwgY29tcGlsZURvKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiZG8qXCIpLCBjb21waWxlU3RhdGVtZW50cyk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBjb21waWxlRm4pO1xuXG5pbnN0YWxsU3BlY2lhbChzeW1ib2wodm9pZCgwKSwgXCJ0aHJvd1wiKSwgY29tcGlsZVRocm93KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwidmVjdG9yXCIpLCBjb21waWxlVmVjdG9yKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwidHJ5XCIpLCBjb21waWxlVHJ5KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiLlwiKSwgY29tcGlsZVByb3BlcnR5KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiYXBwbHlcIiksIGNvbXBpbGVBcHBseSk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcIm5ld1wiKSwgY29tcGlsZU5ldyk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImluc3RhbmNlP1wiKSwgY29tcGlsZUluc3RhbmNlKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwibm90XCIpLCBjb21waWxlTm90KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwibG9vcFwiKSwgY29tcGlsZUxvb3ApO1xuXG5pbnN0YWxsU3BlY2lhbChzeW1ib2wodm9pZCgwKSwgXCJyYXcqXCIpLCBjb21waWxlUmF3KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiY29tbWVudFwiKSwgd3JpdGVDb21tZW50KTtcblxudmFyIGNvbXBpbGVSZVBhdHRlcm4gPSBmdW5jdGlvbiBjb21waWxlUmVQYXR0ZXJuKGZvcm0pIHtcbiAgcmV0dXJuIFwiXCIgKyBmb3JtO1xufTtcbmV4cG9ydHMuY29tcGlsZVJlUGF0dGVybiA9IGNvbXBpbGVSZVBhdHRlcm47XG5cbnZhciBpbnN0YWxsTmF0aXZlID0gZnVuY3Rpb24gaW5zdGFsbE5hdGl2ZShhbGlhcywgb3BlcmF0b3IsIHZhbGlkYXRvciwgZmFsbGJhY2spIHtcbiAgcmV0dXJuIGluc3RhbGxTcGVjaWFsKGFsaWFzLCBmdW5jdGlvbihmb3JtKSB7XG4gICAgcmV0dXJuIGlzRW1wdHkoZm9ybSkgP1xuICAgICAgZmFsbGJhY2sgOlxuICAgICAgcmVkdWNlKGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIn57fSB+e30gfnt9XCIsIGxlZnQsIG5hbWUob3BlcmF0b3IpLCByaWdodCkpO1xuICAgICAgfSwgbWFwKGZ1bmN0aW9uKG9wZXJhbmQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KGlzTGlzdChvcGVyYW5kKSA/XG4gICAgICAgICAgXCIofnt9KVwiIDpcbiAgICAgICAgICBcIn57fVwiLCBjb21waWxlKG1hY3JvZXhwYW5kKG9wZXJhbmQpKSkpO1xuICAgICAgfSwgZm9ybSkpO1xuICB9LCB2YWxpZGF0b3IpO1xufTtcbmV4cG9ydHMuaW5zdGFsbE5hdGl2ZSA9IGluc3RhbGxOYXRpdmU7XG5cbnZhciBpbnN0YWxsT3BlcmF0b3IgPSBmdW5jdGlvbiBpbnN0YWxsT3BlcmF0b3IoYWxpYXMsIG9wZXJhdG9yKSB7XG4gIHJldHVybiBpbnN0YWxsU3BlY2lhbChhbGlhcywgZnVuY3Rpb24oZm9ybSkge1xuICAgIHJldHVybiAoZnVuY3Rpb24gbG9vcChyZXN1bHQsIGxlZnQsIHJpZ2h0LCBvcGVyYW5kcykge1xuICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICByZWN1ciA9IGlzRW1wdHkob3BlcmFuZHMpID9cbiAgICAgICAgXCJcIiArIHJlc3VsdCArIChjb21waWxlVGVtcGxhdGUobGlzdChcIn57fSB+e30gfnt9XCIsIGNvbXBpbGUobWFjcm9leHBhbmQobGVmdCkpLCBuYW1lKG9wZXJhdG9yKSwgY29tcGlsZShtYWNyb2V4cGFuZChyaWdodCkpKSkpIDpcbiAgICAgICAgKHJlc3VsdCA9IFwiXCIgKyByZXN1bHQgKyAoY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e30gfnt9IH57fSAmJiBcIiwgY29tcGlsZShtYWNyb2V4cGFuZChsZWZ0KSksIG5hbWUob3BlcmF0b3IpLCBjb21waWxlKG1hY3JvZXhwYW5kKHJpZ2h0KSkpKSksIGxlZnQgPSByaWdodCwgcmlnaHQgPSBmaXJzdChvcGVyYW5kcyksIG9wZXJhbmRzID0gcmVzdChvcGVyYW5kcyksIGxvb3ApO1xuICAgICAgfTtcbiAgICAgIHJldHVybiByZWN1cjtcbiAgICB9KShcIlwiLCBmaXJzdChmb3JtKSwgc2Vjb25kKGZvcm0pLCByZXN0KHJlc3QoZm9ybSkpKTtcbiAgfSwgdmVyaWZ5VHdvKTtcbn07XG5leHBvcnRzLmluc3RhbGxPcGVyYXRvciA9IGluc3RhbGxPcGVyYXRvcjtcblxudmFyIGNvbXBpbGVyRXJyb3IgPSBmdW5jdGlvbiBjb21waWxlckVycm9yKGZvcm0sIG1lc3NhZ2UpIHtcbiAgdmFyIGVycm9yID0gRXJyb3IoXCJcIiArIG1lc3NhZ2UpO1xuICBlcnJvci5saW5lID0gMTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHsgdGhyb3cgZXJyb3I7IH0pKCk7XG59O1xuZXhwb3J0cy5jb21waWxlckVycm9yID0gY29tcGlsZXJFcnJvcjtcblxudmFyIHZlcmlmeVR3byA9IGZ1bmN0aW9uIHZlcmlmeVR3byhmb3JtKSB7XG4gIHJldHVybiAoaXNFbXB0eShyZXN0KGZvcm0pKSkgfHwgKGlzRW1wdHkocmVzdChyZXN0KGZvcm0pKSkpID9cbiAgICAoZnVuY3Rpb24oKSB7IHRocm93IGNvbXBpbGVyRXJyb3IoZm9ybSwgXCJcIiArIChmaXJzdChmb3JtKSkgKyBcIiBmb3JtIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBvcGVyYW5kc1wiKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnZlcmlmeVR3byA9IHZlcmlmeVR3bztcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCIrXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIrXCIpLCB2b2lkKDApLCAwKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCItXCIpLCBzeW1ib2wodm9pZCgwKSwgXCItXCIpLCB2b2lkKDApLCBcIk5hTlwiKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCIqXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIqXCIpLCB2b2lkKDApLCAxKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCIvXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIvXCIpLCB2ZXJpZnlUd28pO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcIm1vZFwiKSwgc3ltYm9sKFwiJVwiKSwgdmVyaWZ5VHdvKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCJhbmRcIiksIHN5bWJvbCh2b2lkKDApLCBcIiYmXCIpKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCJvclwiKSwgc3ltYm9sKHZvaWQoMCksIFwifHxcIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwibm90PVwiKSwgc3ltYm9sKHZvaWQoMCksIFwiIT1cIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwiPT1cIiksIHN5bWJvbCh2b2lkKDApLCBcIj09PVwiKSk7XG5cbmluc3RhbGxPcGVyYXRvcihzeW1ib2wodm9pZCgwKSwgXCJpZGVudGljYWw/XCIpLCBzeW1ib2wodm9pZCgwKSwgXCI9PT1cIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwiPlwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPlwiKSk7XG5cbmluc3RhbGxPcGVyYXRvcihzeW1ib2wodm9pZCgwKSwgXCI+PVwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPj1cIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwiPFwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPFwiKSk7XG5cbmluc3RhbGxPcGVyYXRvcihzeW1ib2wodm9pZCgwKSwgXCI8PVwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPD1cIikpO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC1hbmRcIiksIHN5bWJvbCh2b2lkKDApLCBcIiZcIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxOYXRpdmUoc3ltYm9sKHZvaWQoMCksIFwiYml0LW9yXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJ8XCIpLCB2ZXJpZnlUd28pO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC14b3JcIiksIHN5bWJvbChcIl5cIikpO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC1ub3RcIiksIHN5bWJvbChcIn5cIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxOYXRpdmUoc3ltYm9sKHZvaWQoMCksIFwiYml0LXNoaWZ0LWxlZnRcIiksIHN5bWJvbCh2b2lkKDApLCBcIjw8XCIpLCB2ZXJpZnlUd28pO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC1zaGlmdC1yaWdodFwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPj5cIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxOYXRpdmUoc3ltYm9sKHZvaWQoMCksIFwiYml0LXNoaWZ0LXJpZ2h0LXplcm8tZmlsXCIpLCBzeW1ib2wodm9pZCgwKSwgXCI+Pj5cIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJzdHJcIiksIGZ1bmN0aW9uIHN0cigpIHtcbiAgdmFyIGZvcm1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcIitcIiksIFwiXCIpLCBmb3Jtcyk7XG59KTtcblxuaW5zdGFsbE1hY3JvKHN5bWJvbCh2b2lkKDApLCBcImxldFwiKSwgZnVuY3Rpb24gbGV0TWFjcm8oYmluZGluZ3MpIHtcbiAgdmFyIGJvZHkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gY29ucyhzeW1ib2wodm9pZCgwKSwgXCJkb1wiKSwgY29uY2F0KGRlZmluZUJpbmRpbmdzKGJpbmRpbmdzKSwgYm9keSkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJjb25kXCIpLCBmdW5jdGlvbiBjb25kKCkge1xuICB2YXIgY2xhdXNlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiAhKGlzRW1wdHkoY2xhdXNlcykpID9cbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImlmXCIpLCBmaXJzdChjbGF1c2VzKSwgaXNFbXB0eShyZXN0KGNsYXVzZXMpKSA/XG4gICAgICAoZnVuY3Rpb24oKSB7IHRocm93IEVycm9yKFwiY29uZCByZXF1aXJlcyBhbiBldmVuIG51bWJlciBvZiBmb3Jtc1wiKTsgfSkoKSA6XG4gICAgICBzZWNvbmQoY2xhdXNlcyksIGNvbnMoc3ltYm9sKHZvaWQoMCksIFwiY29uZFwiKSwgcmVzdChyZXN0KGNsYXVzZXMpKSkpIDpcbiAgICB2b2lkKDApO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJkZWZuXCIpLCBmdW5jdGlvbiBkZWZuKG5hbWUpIHtcbiAgdmFyIGJvZHkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIG5hbWUsIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBuYW1lKSwgYm9keSkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJkZWZuLVwiKSwgZnVuY3Rpb24gZGVmbihuYW1lKSB7XG4gIHZhciBib2R5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcImRlZm5cIiksIHdpdGhNZXRhKG5hbWUsIGNvbmooe1xuICAgIFwicHJpdmF0ZVwiOiB0cnVlXG4gIH0sIG1ldGEobmFtZSkpKSksIGJvZHkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJhc3NlcnRcIiksIGZ1bmN0aW9uIGFzc2VydCh4LCBtZXNzYWdlKSB7XG4gIHZhciB0aXRsZSA9IG1lc3NhZ2UgfHwgXCJcIjtcbiAgdmFyIGFzc2VydGlvbiA9IHByU3RyKHgpO1xuICB2YXIgdXJpID0gKHggfHwgMClbXCJ1cmlcIl07XG4gIHZhciBmb3JtID0gaXNMaXN0KHgpID9cbiAgICBzZWNvbmQoeCkgOlxuICAgIHg7XG4gIHJldHVybiBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImRvXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImlmXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImFuZFwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJub3RcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiaWRlbnRpY2FsP1wiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJ0eXBlb2ZcIiksIHN5bWJvbCh2b2lkKDApLCBcIioqdmVyYm9zZSoqXCIpKSwgXCJ1bmRlZmluZWRcIikpLCBzeW1ib2wodm9pZCgwKSwgXCIqKnZlcmJvc2UqKlwiKSksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiLmxvZ1wiKSwgc3ltYm9sKHZvaWQoMCksIFwiY29uc29sZVwiKSwgXCJBc3NlcnQ6XCIsIGFzc2VydGlvbikpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImlmXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIm5vdFwiKSwgeCksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwidGhyb3dcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiRXJyb3IuXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInN0clwiKSwgXCJBc3NlcnQgZmFpbGVkOiBcIiwgdGl0bGUsIFwiXFxuXFxuQXNzZXJ0aW9uOlxcblxcblwiLCBhc3NlcnRpb24sIFwiXFxuXFxuQWN0dWFsOlxcblxcblwiLCBmb3JtLCBcIlxcbi0tLS0tLS0tLS0tLS0tXFxuXCIpLCB1cmkpKSkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJpbXBvcnRcIiksIGZ1bmN0aW9uKGltcG9ydHMsIHBhdGgpIHtcbiAgcmV0dXJuIGlzTmlsKHBhdGgpID9cbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIGltcG9ydHMpIDpcbiAgaXNTeW1ib2woaW1wb3J0cykgP1xuICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCB3aXRoTWV0YShpbXBvcnRzLCB7XG4gICAgICBcInByaXZhdGVcIjogdHJ1ZVxuICAgIH0pLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIHBhdGgpKSA6XG4gICAgKGZ1bmN0aW9uIGxvb3AoZm9ybSwgbmFtZXMpIHtcbiAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgcmVjdXIgPSBpc0VtcHR5KG5hbWVzKSA/XG4gICAgICAgIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcImRvKlwiKSksIGZvcm0pIDpcbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhbGlhcyA9IGZpcnN0KG5hbWVzKTtcbiAgICAgICAgICB2YXIgaWQgPSBzeW1ib2woXCJcIiArIFwiLi1cIiArIChuYW1lKGFsaWFzKSkpO1xuICAgICAgICAgIHJldHVybiAoZm9ybSA9IGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIHdpdGhNZXRhKGFsaWFzLCB7XG4gICAgICAgICAgICBcInByaXZhdGVcIjogdHJ1ZVxuICAgICAgICAgIH0pLCBsaXN0KGlkLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIHBhdGgpKSksIGZvcm0pLCBuYW1lcyA9IHJlc3QobmFtZXMpLCBsb29wKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVjdXI7XG4gICAgfSkobGlzdCgpLCBpbXBvcnRzKTtcbn0pO1xuXG52YXIgZXhwYW5kTnMgPSBmdW5jdGlvbiBleHBhbmROcyhpZCkge1xuICB2YXIgcGFyYW1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHtcbiAgICB2YXIgbnMgPSBcIlwiICsgaWQ7XG4gICAgdmFyIHJlcXVpcmVyID0gc3BsaXQobnMsIFwiLlwiKTtcbiAgICB2YXIgZG9jID0gaXNTdHJpbmcoZmlyc3QocGFyYW1zKSkgP1xuICAgICAgZmlyc3QocGFyYW1zKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHZhciBhcmdzID0gZG9jID9cbiAgICAgIHJlc3QocGFyYW1zKSA6XG4gICAgICBwYXJhbXM7XG4gICAgdmFyIHBhcnNlUmVmZXJlbmNlcyA9IGZ1bmN0aW9uKGZvcm1zKSB7XG4gICAgICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKHJlZmVyZW5jZXMsIGZvcm0pIHtcbiAgICAgICAgKHJlZmVyZW5jZXMgfHwgMClbbmFtZShmaXJzdChmb3JtKSldID0gdmVjKHJlc3QoZm9ybSkpO1xuICAgICAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgICAgIH0sIHt9LCBmb3Jtcyk7XG4gICAgfTtcbiAgICB2YXIgcmVmZXJlbmNlcyA9IHBhcnNlUmVmZXJlbmNlcyhhcmdzKTtcbiAgICB2YXIgaWRUb1BhdGggPSBmdW5jdGlvbiBpZFRvUGF0aChpZCkge1xuICAgICAgdmFyIHJlcXVpcmVtZW50ID0gc3BsaXQoXCJcIiArIGlkLCBcIi5cIik7XG4gICAgICB2YXIgaXNSZWxhdGl2ZSA9IGZpcnN0KHJlcXVpcmVyKSA9PT0gZmlyc3QocmVxdWlyZW1lbnQpO1xuICAgICAgcmV0dXJuIGlzUmVsYXRpdmUgP1xuICAgICAgICAoZnVuY3Rpb24gbG9vcChmcm9tLCB0bykge1xuICAgICAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgICByZWN1ciA9IGZpcnN0KGZyb20pID09PSBmaXJzdCh0bykgP1xuICAgICAgICAgICAgKGZyb20gPSByZXN0KGZyb20pLCB0byA9IHJlc3QodG8pLCBsb29wKSA6XG4gICAgICAgICAgICBqb2luKFwiL1wiLCBjb25jYXQoW1wiLlwiXSwgcmVwZWF0KGRlYyhjb3VudChmcm9tKSksIFwiLi5cIiksIHRvKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gcmVjdXI7XG4gICAgICAgIH0pKHJlcXVpcmVyLCByZXF1aXJlbWVudCkgOlxuICAgICAgICBqb2luKFwiL1wiLCByZXF1aXJlbWVudCk7XG4gICAgfTtcbiAgICB2YXIgbWFrZVJlcXVpcmUgPSBmdW5jdGlvbihmcm9tLCBhcywgbmFtZSkge1xuICAgICAgdmFyIHBhdGggPSBpZFRvUGF0aChmcm9tKTtcbiAgICAgIHZhciByZXF1aXJlbWVudCA9IG5hbWUgP1xuICAgICAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIi5cIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwicmVxdWlyZVwiKSwgcGF0aCksIHN5bWJvbCh2b2lkKDApLCBcIlwiICsgXCItXCIgKyBuYW1lKSkgOlxuICAgICAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIHBhdGgpO1xuICAgICAgcmV0dXJuIGFzID9cbiAgICAgICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIGFzLCByZXF1aXJlbWVudCkgOlxuICAgICAgICByZXF1aXJlbWVudDtcbiAgICB9O1xuICAgIHZhciBleHBhbmRSZXF1aXJlbWVudCA9IGZ1bmN0aW9uKGZvcm0pIHtcbiAgICAgIHZhciBmcm9tID0gZmlyc3QoZm9ybSk7XG4gICAgICB2YXIgYXMgPSAoXCLqnolhc1wiID09PSBzZWNvbmQoZm9ybSkpICYmICh0aGlyZChmb3JtKSk7XG4gICAgICByZXR1cm4gbWFrZVJlcXVpcmUoZnJvbSwgYXMpO1xuICAgIH07XG4gICAgdmFyIGV4cGFuZFVzZSA9IGZ1bmN0aW9uKGZvcm0pIHtcbiAgICAgIHZhciBmcm9tID0gZmlyc3QoZm9ybSk7XG4gICAgICB2YXIgZGlyZWN0aXZlcyA9IGRpY3Rpb25hcnkuYXBwbHkoZGljdGlvbmFyeSwgdmVjKHJlc3QoZm9ybSkpKTtcbiAgICAgIHZhciBuYW1lcyA9IChkaXJlY3RpdmVzIHx8IDApW1wi6p6Jb25seVwiXTtcbiAgICAgIHZhciByZW5hbWVzID0gKGRpcmVjdGl2ZXMgfHwgMClbXCLqnolyZW5hbWVcIl07XG4gICAgICB2YXIgbmFtZWRJbXBvcnRzID0gbmFtZXMgJiYgKG1hcChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiBtYWtlUmVxdWlyZShmcm9tLCBuYW1lLCBuYW1lKTtcbiAgICAgIH0sIG5hbWVzKSk7XG4gICAgICB2YXIgcmVuYW1lZEltcG9ydHMgPSByZW5hbWVzICYmIChtYXAoZnVuY3Rpb24ocGFpcikge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVpcmUoZnJvbSwgc2Vjb25kKHBhaXIpLCBmaXJzdChwYWlyKSk7XG4gICAgICB9LCByZW5hbWVzKSk7XG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICghKHR5cGVvZihfX3ZlcmJvc2VfXykgPT09IFwidW5kZWZpbmVkXCIpKSAmJiBfX3ZlcmJvc2VfXyA/XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBc3NlcnQ6XCIsIFwiKG9yIG5hbWVzIHJlbmFtZXMpXCIpIDpcbiAgICAgICAgICB2b2lkKDApO1xuICAgICAgICByZXR1cm4gIShuYW1lcyB8fCByZW5hbWVzKSA/XG4gICAgICAgICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJcIiArIFwiQXNzZXJ0IGZhaWxlZDogXCIgKyAoXCJcIiArIFwiT25seSBbbXkubGliIDpvbmx5IFtmb28gYmFyXV0gZm9ybSAmIFwiICsgXCJbY2xvanVyZS5zdHJpbmcgOnJlbmFtZSB7cmVwbGFjZSBzdHItcmVwbGFjZX0gYXJlIHN1cHBvcnRlZFwiKSArIFwiXFxuXFxuQXNzZXJ0aW9uOlxcblxcblwiICsgXCIob3IgbmFtZXMgcmVuYW1lcylcIiArIFwiXFxuXFxuQWN0dWFsOlxcblxcblwiICsgbmFtZXMgKyBcIlxcbi0tLS0tLS0tLS0tLS0tXFxuXCIsIHZvaWQoMCkpOyB9KSgpIDpcbiAgICAgICAgICB2b2lkKDApO1xuICAgICAgfSkoKTtcbiAgICAgIHJldHVybiBjb25jYXQoW10sIG5hbWVkSW1wb3J0cywgcmVuYW1lZEltcG9ydHMpO1xuICAgIH07XG4gICAgdmFyIHJlcXVpcmVGb3JtcyA9IChyZWZlcmVuY2VzIHx8IDApW1wicmVxdWlyZVwiXTtcbiAgICB2YXIgdXNlRm9ybXMgPSAocmVmZXJlbmNlcyB8fCAwKVtcInVzZVwiXTtcbiAgICB2YXIgcmVxdWlyZW1lbnRzID0gcmVxdWlyZUZvcm1zID9cbiAgICAgIG1hcChleHBhbmRSZXF1aXJlbWVudCwgcmVxdWlyZUZvcm1zKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHZhciB1c2VzID0gdXNlRm9ybXMgP1xuICAgICAgY29uY2F0LmFwcGx5KGNvbmNhdCwgbWFwKGV4cGFuZFVzZSwgdXNlRm9ybXMpKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHJldHVybiBjb25jYXQobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkbypcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIqbnMqXCIpLCBucyksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCIuLW5hbWVzcGFjZVwiKSwgc3ltYm9sKHZvaWQoMCksIFwibW9kdWxlXCIpKSwgc3ltYm9sKHZvaWQoMCksIFwiKm5zKlwiKSkpLCBkb2MgP1xuICAgICAgW2xpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCIuLWRlc2NyaXB0aW9uXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJtb2R1bGVcIikpLCBkb2MpXSA6XG4gICAgICB2b2lkKDApLCByZXF1aXJlbWVudHMsIHVzZXMpO1xuICB9KSgpO1xufTtcbmV4cG9ydHMuZXhwYW5kTnMgPSBleHBhbmROcztcblxuaW5zdGFsbE1hY3JvKHN5bWJvbCh2b2lkKDApLCBcIm5zXCIpLCBleHBhbmROcyk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJwcmludFwiKSwgZnVuY3Rpb24oKSB7XG4gIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgXCJQcmludHMgdGhlIG9iamVjdChzKSB0byB0aGUgb3V0cHV0IGZvciBodW1hbiBjb25zdW1wdGlvbi5cIjtcbiAgcmV0dXJuIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcIi5sb2dcIiksIHN5bWJvbCh2b2lkKDApLCBcImNvbnNvbGVcIikpLCBtb3JlKTtcbn0pXG4iLCJ2YXIgc3RyID0gKHJlcXVpcmUoXCIuLi9ydW50aW1lXCIpKS5zdHI7O1xuXG52YXIgcmVzdCA9IChyZXF1aXJlKFwiLi4vc2VxdWVuY2VcIikpLnJlc3Q7O1xuXG52YXIgcmVhZEZyb21TdHJpbmcgPSAocmVxdWlyZShcIi4uL3JlYWRlclwiKSkucmVhZEZyb21TdHJpbmc7O1xuXG52YXIgY29tcGlsZVByb2dyYW0gPSAocmVxdWlyZShcIi4uL2NvbXBpbGVyXCIpKS5jb21waWxlUHJvZ3JhbTs7XG5cbnZhciB0cmFuc3BpbGUgPSBmdW5jdGlvbiB0cmFuc3BpbGUoc291cmNlLCB1cmkpIHtcbiAgcmV0dXJuIFwiXCIgKyAoY29tcGlsZVByb2dyYW0ocmVzdChyZWFkRnJvbVN0cmluZyhcIlwiICsgXCIoZG8gXCIgKyBzb3VyY2UgKyBcIilcIiwgdXJpKSkpKSArIFwiXFxuXCI7XG59O1xuZXhwb3J0cy50cmFuc3BpbGUgPSB0cmFuc3BpbGU7XG5cbnZhciBldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKGNvZGUsIHVybCkge1xuICByZXR1cm4gZXZhbCh0cmFuc3BpbGUoY29kZSwgdXJsKSk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZSA9IGV2YWx1YXRlO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gcnVuKGNvZGUsIHVybCkge1xuICByZXR1cm4gKEZ1bmN0aW9uKHRyYW5zcGlsZShjb2RlLCB1cmwpKSkoKTtcbn07XG5leHBvcnRzLnJ1biA9IHJ1bjtcblxudmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkKHVybCwgY2FsbGJhY2spIHtcbiAgdmFyIHJlcXVlc3QgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3QgP1xuICAgIG5ldyBYTUxIdHRwUmVxdWVzdCgpIDpcbiAgICBuZXcgQWN0aXZlWE9iamVjdChcIk1pY3Jvc29mdC5YTUxIVFRQXCIpO1xuICByZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcbiAgcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlID9cbiAgICByZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoXCJhcHBsaWNhdGlvbi93aXNwXCIpIDpcbiAgICB2b2lkKDApO1xuICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiByZXF1ZXN0LnJlYWR5U3RhdGUgPT09IDQgP1xuICAgICAgKHJlcXVlc3Quc3RhdHVzID09PSAwKSB8fCAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkgP1xuICAgICAgICBjYWxsYmFjayhydW4ocmVxdWVzdC5yZXNwb25zZVRleHQsIHVybCkpIDpcbiAgICAgICAgY2FsbGJhY2soXCJDb3VsZCBub3QgbG9hZFwiKSA6XG4gICAgICB2b2lkKDApO1xuICB9O1xuICByZXR1cm4gcmVxdWVzdC5zZW5kKG51bGwpO1xufTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5cbnZhciBydW5TY3JpcHRzID0gZnVuY3Rpb24gcnVuU2NyaXB0cygpIHtcbiAgdmFyIHNjcmlwdHMgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIiksIGZ1bmN0aW9uKHNjcmlwdCkge1xuICAgIHJldHVybiBzY3JpcHQudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi93aXNwXCI7XG4gIH0pO1xuICB2YXIgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgcmV0dXJuIHNjcmlwdHMubGVuZ3RoID9cbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5zcmMgP1xuICAgICAgICAgIGxvYWQoc2NyaXB0LnNyYywgbmV4dCkgOlxuICAgICAgICAgIG5leHQocnVuKHNjcmlwdC5pbm5lckhUTUwpKTtcbiAgICAgIH0pKCkgOlxuICAgICAgdm9pZCgwKTtcbiAgfTtcbiAgcmV0dXJuIG5leHQoKTtcbn07XG5leHBvcnRzLnJ1blNjcmlwdHMgPSBydW5TY3JpcHRzO1xuXG4oZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB8fCAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJpbnRlcmFjdGl2ZVwiKSA/XG4gIHJ1blNjcmlwdHMoKSA6XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBydW5TY3JpcHRzLCBmYWxzZSkgOlxuICB3aW5kb3cuYXR0YWNoRXZlbnQoXCJvbmxvYWRcIiwgcnVuU2NyaXB0cylcbiIsInZhciBpc0tleXdvcmQgPSAocmVxdWlyZShcIi4uLy4uL2FzdFwiKSkuaXNLZXl3b3JkO1xudmFyIGlzU3ltYm9sID0gKHJlcXVpcmUoXCIuLi8uLi9hc3RcIikpLmlzU3ltYm9sO1xudmFyIHN5bWJvbCA9IChyZXF1aXJlKFwiLi4vLi4vYXN0XCIpKS5zeW1ib2w7XG52YXIgbmFtZXNwYWNlID0gKHJlcXVpcmUoXCIuLi8uLi9hc3RcIikpLm5hbWVzcGFjZTtcbnZhciBuYW1lID0gKHJlcXVpcmUoXCIuLi8uLi9hc3RcIikpLm5hbWU7O1xuXG52YXIgaXNFbXB0eSA9IChyZXF1aXJlKFwiLi4vLi4vc2VxdWVuY2VcIikpLmlzRW1wdHk7XG52YXIgcmVkdWNlID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkucmVkdWNlO1xudmFyIGxhc3QgPSAocmVxdWlyZShcIi4uLy4uL3NlcXVlbmNlXCIpKS5sYXN0O1xudmFyIGNvdW50ID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkuY291bnQ7XG52YXIgbWFwID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkubWFwO1xudmFyIHZlYyA9IChyZXF1aXJlKFwiLi4vLi4vc2VxdWVuY2VcIikpLnZlYztcbnZhciBpc0xpc3QgPSAocmVxdWlyZShcIi4uLy4uL3NlcXVlbmNlXCIpKS5pc0xpc3Q7XG52YXIgcmVzdCA9IChyZXF1aXJlKFwiLi4vLi4vc2VxdWVuY2VcIikpLnJlc3Q7XG52YXIgZmlyc3QgPSAocmVxdWlyZShcIi4uLy4uL3NlcXVlbmNlXCIpKS5maXJzdDtcbnZhciBsaXN0ID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkubGlzdDs7XG5cbnZhciBzdWJzID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5zdWJzO1xudmFyIGRlYyA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkuZGVjO1xudmFyIHJlRmluZCA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkucmVGaW5kO1xudmFyIGlzUmVQYXR0ZXJuID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5pc1JlUGF0dGVybjtcbnZhciBpc0Jvb2xlYW4gPSAocmVxdWlyZShcIi4uLy4uL3J1bnRpbWVcIikpLmlzQm9vbGVhbjtcbnZhciBpc0RpY3Rpb25hcnkgPSAocmVxdWlyZShcIi4uLy4uL3J1bnRpbWVcIikpLmlzRGljdGlvbmFyeTtcbnZhciBpc1ZlY3RvciA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkuaXNWZWN0b3I7XG52YXIgaXNOdW1iZXIgPSAocmVxdWlyZShcIi4uLy4uL3J1bnRpbWVcIikpLmlzTnVtYmVyO1xudmFyIGlzU3RyaW5nID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5pc1N0cmluZztcbnZhciBpc05pbCA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkuaXNOaWw7XG52YXIgaXNUcnVlID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5pc1RydWU7O1xuXG52YXIgdXBwZXJDYXNlID0gKHJlcXVpcmUoXCIuLi8uLi9zdHJpbmdcIikpLnVwcGVyQ2FzZTtcbnZhciBzcGxpdCA9IChyZXF1aXJlKFwiLi4vLi4vc3RyaW5nXCIpKS5zcGxpdDtcbnZhciBqb2luID0gKHJlcXVpcmUoXCIuLi8uLi9zdHJpbmdcIikpLmpvaW47XG52YXIgcmVwbGFjZSA9IChyZXF1aXJlKFwiLi4vLi4vc3RyaW5nXCIpKS5yZXBsYWNlOztcblxudmFyIHdyaXRlUmVmZXJlbmNlID0gZnVuY3Rpb24gd3JpdGVSZWZlcmVuY2UoZm9ybSkge1xuICBcIlRyYW5zbGF0ZXMgcmVmZXJlbmNlcyBmcm9tIGNsb2p1cmUgY29udmVudGlvbiB0byBKUzpcXG5cXG4gICoqbWFjcm9zKiogICAgICBfX21hY3Jvc19fXFxuICBsaXN0LT52ZWN0b3IgICAgbGlzdFRvVmVjdG9yXFxuICBzZXQhICAgICAgICAgICAgc2V0XFxuICBmb29fYmFyICAgICAgICAgZm9vX2JhclxcbiAgbnVtYmVyPyAgICAgICAgIGlzTnVtYmVyXFxuICBjcmVhdGUtc2VydmVyICAgY3JlYXRlU2VydmVyXCI7XG4gIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlkID0gbmFtZShmb3JtKTtcbiAgICBpZCA9IGlkID09PSBcIipcIiA/XG4gICAgICBcIm11bHRpcGx5XCIgOlxuICAgIGlkID09PSBcIi9cIiA/XG4gICAgICBcImRpdmlkZVwiIDpcbiAgICBpZCA9PT0gXCIrXCIgP1xuICAgICAgXCJzdW1cIiA6XG4gICAgaWQgPT09IFwiLVwiID9cbiAgICAgIFwic3VidHJhY3RcIiA6XG4gICAgaWQgPT09IFwiPVwiID9cbiAgICAgIFwiZXF1YWw/XCIgOlxuICAgIGlkID09PSBcIj09XCIgP1xuICAgICAgXCJzdHJpY3QtZXF1YWw/XCIgOlxuICAgIGlkID09PSBcIjw9XCIgP1xuICAgICAgXCJub3QtZ3JlYXRlci10aGFuXCIgOlxuICAgIGlkID09PSBcIj49XCIgP1xuICAgICAgXCJub3QtbGVzcy10aGFuXCIgOlxuICAgIGlkID09PSBcIj5cIiA/XG4gICAgICBcImdyZWF0ZXItdGhhblwiIDpcbiAgICBpZCA9PT0gXCI8XCIgP1xuICAgICAgXCJsZXNzLXRoYW5cIiA6XG4gICAgXCJlbHNlXCIgP1xuICAgICAgaWQgOlxuICAgICAgdm9pZCgwKTtcbiAgICBpZCA9IGpvaW4oXCJfXCIsIHNwbGl0KGlkLCBcIipcIikpO1xuICAgIGlkID0gam9pbihcIi10by1cIiwgc3BsaXQoaWQsIFwiLT5cIikpO1xuICAgIGlkID0gam9pbihzcGxpdChpZCwgXCIhXCIpKTtcbiAgICBpZCA9IGpvaW4oXCIkXCIsIHNwbGl0KGlkLCBcIiVcIikpO1xuICAgIGlkID0gam9pbihcIi1wbHVzLVwiLCBzcGxpdChpZCwgXCIrXCIpKTtcbiAgICBpZCA9IGpvaW4oXCItYW5kLVwiLCBzcGxpdChpZCwgXCImXCIpKTtcbiAgICBpZCA9IGxhc3QoaWQpID09PSBcIj9cIiA/XG4gICAgICBcIlwiICsgXCJpcy1cIiArIChzdWJzKGlkLCAwLCBkZWMoY291bnQoaWQpKSkpIDpcbiAgICAgIGlkO1xuICAgIGlkID0gcmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXR1cm4gXCJcIiArIHJlc3VsdCArICgoIShpc0VtcHR5KHJlc3VsdCkpKSAmJiAoIShpc0VtcHR5KGtleSkpKSA/XG4gICAgICAgIFwiXCIgKyAodXBwZXJDYXNlKChrZXkgfHwgMClbMF0pKSArIChzdWJzKGtleSwgMSkpIDpcbiAgICAgICAga2V5KTtcbiAgICB9LCBcIlwiLCBzcGxpdChpZCwgXCItXCIpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH0pKCk7XG59O1xuZXhwb3J0cy53cml0ZVJlZmVyZW5jZSA9IHdyaXRlUmVmZXJlbmNlO1xuXG52YXIgd3JpdGVLZXl3b3JkUmVmZXJlbmNlID0gZnVuY3Rpb24gd3JpdGVLZXl3b3JkUmVmZXJlbmNlKGZvcm0pIHtcbiAgcmV0dXJuIFwiXCIgKyBcIlxcXCJcIiArIChuYW1lKGZvcm0pKSArIFwiXFxcIlwiO1xufTtcbmV4cG9ydHMud3JpdGVLZXl3b3JkUmVmZXJlbmNlID0gd3JpdGVLZXl3b3JkUmVmZXJlbmNlO1xuXG52YXIgd3JpdGVLZXl3b3JkID0gZnVuY3Rpb24gd3JpdGVLZXl3b3JkKGZvcm0pIHtcbiAgcmV0dXJuIFwiXCIgKyBcIlxcXCJcIiArIFwi6p6JXCIgKyAobmFtZShmb3JtKSkgKyBcIlxcXCJcIjtcbn07XG5leHBvcnRzLndyaXRlS2V5d29yZCA9IHdyaXRlS2V5d29yZDtcblxudmFyIHdyaXRlU3ltYm9sID0gZnVuY3Rpb24gd3JpdGVTeW1ib2woZm9ybSkge1xuICByZXR1cm4gd3JpdGUobGlzdChzeW1ib2wodm9pZCgwKSwgXCJzeW1ib2xcIiksIG5hbWVzcGFjZShmb3JtKSwgbmFtZShmb3JtKSkpO1xufTtcbmV4cG9ydHMud3JpdGVTeW1ib2wgPSB3cml0ZVN5bWJvbDtcblxudmFyIHdyaXRlTmlsID0gZnVuY3Rpb24gd3JpdGVOaWwoZm9ybSkge1xuICByZXR1cm4gXCJ2b2lkKDApXCI7XG59O1xuZXhwb3J0cy53cml0ZU5pbCA9IHdyaXRlTmlsO1xuXG52YXIgd3JpdGVOdW1iZXIgPSBmdW5jdGlvbiB3cml0ZU51bWJlcihmb3JtKSB7XG4gIHJldHVybiBmb3JtO1xufTtcbmV4cG9ydHMud3JpdGVOdW1iZXIgPSB3cml0ZU51bWJlcjtcblxudmFyIHdyaXRlQm9vbGVhbiA9IGZ1bmN0aW9uIHdyaXRlQm9vbGVhbihmb3JtKSB7XG4gIHJldHVybiBpc1RydWUoZm9ybSkgP1xuICAgIFwidHJ1ZVwiIDpcbiAgICBcImZhbHNlXCI7XG59O1xuZXhwb3J0cy53cml0ZUJvb2xlYW4gPSB3cml0ZUJvb2xlYW47XG5cbnZhciB3cml0ZVN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlU3RyaW5nKGZvcm0pIHtcbiAgZm9ybSA9IHJlcGxhY2UoZm9ybSwgUmVnRXhwKFwiXFxcXFxcXFxcIiwgXCJnXCIpLCBcIlxcXFxcXFxcXCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXG5cIiwgXCJnXCIpLCBcIlxcXFxuXCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXHJcIiwgXCJnXCIpLCBcIlxcXFxyXCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXHRcIiwgXCJnXCIpLCBcIlxcXFx0XCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXFwiXCIsIFwiZ1wiKSwgXCJcXFxcXFxcIlwiKTtcbiAgcmV0dXJuIFwiXCIgKyBcIlxcXCJcIiArIGZvcm0gKyBcIlxcXCJcIjtcbn07XG5leHBvcnRzLndyaXRlU3RyaW5nID0gd3JpdGVTdHJpbmc7XG5cbnZhciB3cml0ZVRlbXBsYXRlID0gZnVuY3Rpb24gd3JpdGVUZW1wbGF0ZSgpIHtcbiAgdmFyIGZvcm0gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICByZXR1cm4gKGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbmRlbnRQYXR0ZXJuID0gL1xcbiAqJC87XG4gICAgdmFyIGxpbmVCcmVha1BhdHRlciA9IFJlZ0V4cChcIlxcblwiLCBcImdcIik7XG4gICAgdmFyIGdldEluZGVudGF0aW9uID0gZnVuY3Rpb24oY29kZSkge1xuICAgICAgcmV0dXJuIChyZUZpbmQoaW5kZW50UGF0dGVybiwgY29kZSkpIHx8IFwiXFxuXCI7XG4gICAgfTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoY29kZSwgcGFydHMsIHZhbHVlcykge1xuICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICByZWN1ciA9IGNvdW50KHBhcnRzKSA+IDEgP1xuICAgICAgICAoY29kZSA9IFwiXCIgKyBjb2RlICsgKGZpcnN0KHBhcnRzKSkgKyAocmVwbGFjZShcIlwiICsgXCJcIiArIChmaXJzdCh2YWx1ZXMpKSwgbGluZUJyZWFrUGF0dGVyLCBnZXRJbmRlbnRhdGlvbihmaXJzdChwYXJ0cykpKSksIHBhcnRzID0gcmVzdChwYXJ0cyksIHZhbHVlcyA9IHJlc3QodmFsdWVzKSwgbG9vcCkgOlxuICAgICAgICBcIlwiICsgY29kZSArIChmaXJzdChwYXJ0cykpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiByZWN1cjtcbiAgICB9KShcIlwiLCBzcGxpdChmaXJzdChmb3JtKSwgXCJ+e31cIiksIHJlc3QoZm9ybSkpO1xuICB9KSgpO1xufTtcbmV4cG9ydHMud3JpdGVUZW1wbGF0ZSA9IHdyaXRlVGVtcGxhdGU7XG5cbnZhciB3cml0ZUdyb3VwID0gZnVuY3Rpb24gd3JpdGVHcm91cCgpIHtcbiAgdmFyIGZvcm1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGpvaW4oXCIsIFwiLCBmb3Jtcyk7XG59O1xuZXhwb3J0cy53cml0ZUdyb3VwID0gd3JpdGVHcm91cDtcblxudmFyIHdyaXRlSW52b2tlID0gZnVuY3Rpb24gd3JpdGVJbnZva2UoY2FsbGVlKSB7XG4gIHZhciBwYXJhbXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gd3JpdGVUZW1wbGF0ZShcIn57fSh+e30pXCIsIGNhbGxlZSwgd3JpdGVHcm91cC5hcHBseSh3cml0ZUdyb3VwLCBwYXJhbXMpKTtcbn07XG5leHBvcnRzLndyaXRlSW52b2tlID0gd3JpdGVJbnZva2U7XG5cbnZhciB3cml0ZUVycm9yID0gZnVuY3Rpb24gd3JpdGVFcnJvcihtZXNzYWdlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKGZ1bmN0aW9uKCkgeyB0aHJvdyBFcnJvcihtZXNzYWdlKTsgfSkoKTtcbiAgfTtcbn07XG5leHBvcnRzLndyaXRlRXJyb3IgPSB3cml0ZUVycm9yO1xuXG52YXIgd3JpdGVWZWN0b3IgPSB3cml0ZUVycm9yKFwiVmVjdG9ycyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbmV4cG9ydHMud3JpdGVWZWN0b3IgPSB3cml0ZVZlY3RvcjtcblxudmFyIHdyaXRlRGljdGlvbmFyeSA9IHdyaXRlRXJyb3IoXCJEaWN0aW9uYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG5leHBvcnRzLndyaXRlRGljdGlvbmFyeSA9IHdyaXRlRGljdGlvbmFyeTtcblxudmFyIHdyaXRlUGF0dGVybiA9IHdyaXRlRXJyb3IoXCJSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuZXhwb3J0cy53cml0ZVBhdHRlcm4gPSB3cml0ZVBhdHRlcm47XG5cbnZhciBjb21waWxlQ29tbWVudCA9IGZ1bmN0aW9uIGNvbXBpbGVDb21tZW50KGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiLy9+e31cXG5cIiwgZmlyc3QoZm9ybSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVDb21tZW50ID0gY29tcGlsZUNvbW1lbnQ7XG5cbnZhciB3cml0ZURlZiA9IGZ1bmN0aW9uIHdyaXRlRGVmKGZvcm0pIHtcbiAgdmFyIGlkID0gZmlyc3QoZm9ybSk7XG4gIHZhciBpc0V4cG9ydCA9ICgoKChtZXRhKGZvcm0pKSB8fCB7fSkgfHwgMClbXCJ0b3BcIl0pICYmICghKCgoKG1ldGEoaWQpKSB8fCB7fSkgfHwgMClbXCJwcml2YXRlXCJdKSk7XG4gIHZhciBhdHRyaWJ1dGUgPSBzeW1ib2wobmFtZXNwYWNlKGlkKSwgXCJcIiArIFwiLVwiICsgKG5hbWUoaWQpKSk7XG4gIHJldHVybiBpc0V4cG9ydCA/XG4gICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ2YXIgfnt9O1xcbn57fVwiLCBjb21waWxlKGNvbnMoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgZm9ybSkpLCBjb21waWxlKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCIuXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJleHBvcnRzXCIpLCBhdHRyaWJ1dGUpLCBpZCkpKSkgOlxuICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwidmFyIH57fVwiLCBjb21waWxlKGNvbnMoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgZm9ybSkpKSk7XG59O1xuZXhwb3J0cy53cml0ZURlZiA9IHdyaXRlRGVmO1xuXG52YXIgd3JpdGUgPSBmdW5jdGlvbiB3cml0ZShmb3JtKSB7XG4gIHJldHVybiBpc05pbChmb3JtKSA/XG4gICAgd3JpdGVOaWwoZm9ybSkgOlxuICBpc1N5bWJvbChmb3JtKSA/XG4gICAgd3JpdGVSZWZlcmVuY2UoZm9ybSkgOlxuICBpc0tleXdvcmQoZm9ybSkgP1xuICAgIHdyaXRlS2V5d29yZFJlZmVyZW5jZShmb3JtKSA6XG4gIGlzU3RyaW5nKGZvcm0pID9cbiAgICB3cml0ZVN0cmluZyhmb3JtKSA6XG4gIGlzTnVtYmVyKGZvcm0pID9cbiAgICB3cml0ZU51bWJlcihmb3JtKSA6XG4gIGlzQm9vbGVhbihmb3JtKSA/XG4gICAgd3JpdGVCb29sZWFuKGZvcm0pIDpcbiAgaXNSZVBhdHRlcm4oZm9ybSkgP1xuICAgIHdyaXRlUGF0dGVybihmb3JtKSA6XG4gIGlzVmVjdG9yKGZvcm0pID9cbiAgICB3cml0ZVZlY3Rvcihmb3JtKSA6XG4gIGlzRGljdGlvbmFyeShmb3JtKSA/XG4gICAgd3JpdGVEaWN0aW9uYXJ5KCkgOlxuICBpc0xpc3QoZm9ybSkgP1xuICAgIHdyaXRlSW52b2tlLmFwcGx5KHdyaXRlSW52b2tlLCBtYXAod3JpdGUsIHZlYyhmb3JtKSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIHdyaXRlRXJyb3IoXCJVbnN1cHBvcnRlZCBmb3JtXCIpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMud3JpdGUgPSB3cml0ZVxuIl19
|
3669
|
+
;
|