breeze-client 2.1.2 → 2.1.3-mjs

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  6. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  8. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  10. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  12. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  13. package/esm2020/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +130 -0
  14. package/esm2020/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  15. package/esm2020/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  16. package/esm2020/adapter-ajax-fetch/adapter-ajax-fetch.mjs +132 -0
  17. package/esm2020/adapter-ajax-fetch/adapter-core.mjs +49 -0
  18. package/esm2020/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  19. package/esm2020/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +137 -0
  20. package/esm2020/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  21. package/esm2020/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  22. package/esm2020/adapter-ajax-jquery/adapter-ajax-jquery.mjs +103 -0
  23. package/esm2020/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  24. package/esm2020/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  25. package/esm2020/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  26. package/esm2020/adapter-data-service-odata/adapter-core.mjs +49 -0
  27. package/esm2020/adapter-data-service-odata/adapter-data-service-odata.mjs +456 -0
  28. package/esm2020/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  29. package/esm2020/adapter-data-service-webapi/adapter-data-service-webapi.mjs +93 -0
  30. package/esm2020/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  31. package/esm2020/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +268 -0
  32. package/esm2020/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  33. package/esm2020/adapter-model-library-ko/adapter-model-library-ko.mjs +240 -0
  34. package/esm2020/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  35. package/esm2020/adapter-uri-builder-json/adapter-core.mjs +49 -0
  36. package/esm2020/adapter-uri-builder-json/adapter-uri-builder-json.mjs +36 -0
  37. package/esm2020/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  38. package/esm2020/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  39. package/esm2020/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +190 -0
  40. package/esm2020/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  41. package/esm2020/breeze-client.mjs +5 -0
  42. package/esm2020/index.mjs +2 -0
  43. package/esm2020/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  44. package/esm2020/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  45. package/esm2020/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  46. package/esm2020/mixin-save-queuing/mixin-save-queuing.mjs +400 -0
  47. package/esm2020/src/abstract-data-service-adapter.mjs +296 -0
  48. package/esm2020/src/array.mjs +4 -0
  49. package/esm2020/src/assert-param.mjs +312 -0
  50. package/esm2020/src/breeze.mjs +85 -0
  51. package/esm2020/src/complex-array.mjs +117 -0
  52. package/esm2020/src/config.mjs +223 -0
  53. package/esm2020/src/core.mjs +707 -0
  54. package/esm2020/src/csdl-metadata-parser.mjs +385 -0
  55. package/esm2020/src/data-service.mjs +203 -0
  56. package/esm2020/src/data-type.mjs +444 -0
  57. package/esm2020/src/default-property-interceptor.mjs +460 -0
  58. package/esm2020/src/entity-action.mjs +45 -0
  59. package/esm2020/src/entity-aspect.mjs +806 -0
  60. package/esm2020/src/entity-group.mjs +187 -0
  61. package/esm2020/src/entity-key.mjs +116 -0
  62. package/esm2020/src/entity-manager.mjs +2094 -0
  63. package/esm2020/src/entity-metadata.mjs +2109 -0
  64. package/esm2020/src/entity-query.mjs +996 -0
  65. package/esm2020/src/entity-state.mjs +99 -0
  66. package/esm2020/src/enum.mjs +141 -0
  67. package/esm2020/src/event.mjs +256 -0
  68. package/esm2020/src/interface-registry.mjs +41 -0
  69. package/esm2020/src/key-generator.mjs +108 -0
  70. package/esm2020/src/local-query-comparison-options.mjs +65 -0
  71. package/esm2020/src/mapping-context.mjs +405 -0
  72. package/esm2020/src/naming-convention.mjs +88 -0
  73. package/esm2020/src/observable-array.mjs +183 -0
  74. package/esm2020/src/predicate.mjs +1232 -0
  75. package/esm2020/src/primitive-array.mjs +85 -0
  76. package/esm2020/src/query-options.mjs +152 -0
  77. package/esm2020/src/relation-array.mjs +173 -0
  78. package/esm2020/src/save-options.mjs +41 -0
  79. package/esm2020/src/unattached-children-map.mjs +58 -0
  80. package/esm2020/src/validate.mjs +988 -0
  81. package/esm2020/src/validation-options.mjs +64 -0
  82. package/fesm2015/{breeze-client-adapter-ajax-angularjs.js → breeze-client-adapter-ajax-angularjs.mjs} +1 -1
  83. package/fesm2015/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  84. package/fesm2015/{breeze-client-adapter-ajax-fetch.js → breeze-client-adapter-ajax-fetch.mjs} +5 -3
  85. package/fesm2015/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  86. package/fesm2015/{breeze-client-adapter-ajax-httpclient.js → breeze-client-adapter-ajax-httpclient.mjs} +1 -1
  87. package/fesm2015/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  88. package/fesm2015/{breeze-client-adapter-ajax-jquery.js → breeze-client-adapter-ajax-jquery.mjs} +2 -2
  89. package/fesm2015/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  90. package/fesm2015/{breeze-client-adapter-ajax-post.js → breeze-client-adapter-ajax-post.mjs} +1 -1
  91. package/fesm2015/breeze-client-adapter-ajax-post.mjs.map +1 -0
  92. package/fesm2015/{breeze-client-adapter-data-service-odata.js → breeze-client-adapter-data-service-odata.mjs} +20 -22
  93. package/fesm2015/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  94. package/fesm2015/{breeze-client-adapter-data-service-webapi.js → breeze-client-adapter-data-service-webapi.mjs} +13 -13
  95. package/fesm2015/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  96. package/fesm2015/{breeze-client-adapter-model-library-backing-store.js → breeze-client-adapter-model-library-backing-store.mjs} +13 -13
  97. package/fesm2015/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  98. package/fesm2015/{breeze-client-adapter-model-library-ko.js → breeze-client-adapter-model-library-ko.mjs} +13 -13
  99. package/fesm2015/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  100. package/fesm2015/{breeze-client-adapter-uri-builder-json.js → breeze-client-adapter-uri-builder-json.mjs} +8 -8
  101. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  102. package/fesm2015/{breeze-client-adapter-uri-builder-odata.js → breeze-client-adapter-uri-builder-odata.mjs} +85 -86
  103. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  104. package/fesm2015/{breeze-client-mixin-get-entity-graph.js → breeze-client-mixin-get-entity-graph.mjs} +1 -1
  105. package/fesm2015/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  106. package/fesm2015/{breeze-client-mixin-save-queuing.js → breeze-client-mixin-save-queuing.mjs} +1 -1
  107. package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +1 -0
  108. package/fesm2015/{breeze-client.js → breeze-client.mjs} +417 -422
  109. package/fesm2015/breeze-client.mjs.map +1 -0
  110. package/{fesm5/breeze-client-adapter-ajax-angularjs.js → fesm2020/breeze-client-adapter-ajax-angularjs.mjs} +41 -42
  111. package/fesm2020/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  112. package/{fesm5/breeze-client-adapter-ajax-fetch.js → fesm2020/breeze-client-adapter-ajax-fetch.mjs} +44 -43
  113. package/fesm2020/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  114. package/{fesm5/breeze-client-adapter-ajax-httpclient.js → fesm2020/breeze-client-adapter-ajax-httpclient.mjs} +43 -44
  115. package/fesm2020/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  116. package/{fesm5/breeze-client-adapter-ajax-jquery.js → fesm2020/breeze-client-adapter-ajax-jquery.mjs} +18 -19
  117. package/fesm2020/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  118. package/{fesm5/breeze-client-adapter-ajax-post.js → fesm2020/breeze-client-adapter-ajax-post.mjs} +8 -11
  119. package/fesm2020/breeze-client-adapter-ajax-post.mjs.map +1 -0
  120. package/{fesm5/breeze-client-adapter-data-service-odata.js → fesm2020/breeze-client-adapter-data-service-odata.mjs} +126 -134
  121. package/fesm2020/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  122. package/{fesm5/breeze-client-adapter-data-service-webapi.js → fesm2020/breeze-client-adapter-data-service-webapi.mjs} +38 -42
  123. package/fesm2020/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  124. package/{fesm5/breeze-client-adapter-model-library-backing-store.js → fesm2020/breeze-client-adapter-model-library-backing-store.mjs} +63 -64
  125. package/fesm2020/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  126. package/{fesm5/breeze-client-adapter-model-library-ko.js → fesm2020/breeze-client-adapter-model-library-ko.mjs} +57 -58
  127. package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  128. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs +91 -0
  129. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  130. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs +245 -0
  131. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  132. package/{fesm5/breeze-client-mixin-get-entity-graph.js → fesm2020/breeze-client-mixin-get-entity-graph.mjs} +45 -45
  133. package/fesm2020/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  134. package/{fesm5/breeze-client-mixin-save-queuing.js → fesm2020/breeze-client-mixin-save-queuing.mjs} +116 -126
  135. package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +1 -0
  136. package/{fesm5/breeze-client.js → fesm2020/breeze-client.mjs} +3403 -3615
  137. package/fesm2020/breeze-client.mjs.map +1 -0
  138. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  139. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  140. package/package.json +126 -12
  141. package/src/entity-metadata.d.ts +6 -4
  142. package/src/entity-query.d.ts +1 -1
  143. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  144. package/adapter-ajax-angularjs/package.json +0 -13
  145. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  146. package/adapter-ajax-fetch/package.json +0 -13
  147. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  148. package/adapter-ajax-httpclient/package.json +0 -17
  149. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  150. package/adapter-ajax-jquery/package.json +0 -13
  151. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  152. package/adapter-ajax-post/package.json +0 -13
  153. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  154. package/adapter-data-service-odata/package.json +0 -13
  155. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  156. package/adapter-data-service-webapi/package.json +0 -13
  157. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  158. package/adapter-model-library-backing-store/package.json +0 -13
  159. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  160. package/adapter-model-library-ko/package.json +0 -13
  161. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  162. package/adapter-uri-builder-json/package.json +0 -13
  163. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  164. package/adapter-uri-builder-odata/package.json +0 -13
  165. package/breeze-client.d.ts +0 -8
  166. package/breeze-client.metadata.json +0 -1
  167. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  168. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  169. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  170. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  171. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  172. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  173. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  174. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  175. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  176. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  177. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  178. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  179. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  180. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  181. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  182. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  183. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  184. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  185. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  186. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  187. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -743
  188. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  189. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  190. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  191. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -326
  192. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  193. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  194. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  195. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  196. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  197. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  198. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  199. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  200. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  201. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  202. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  203. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  204. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  205. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  206. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  207. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  208. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  209. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  210. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  211. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  212. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  213. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  214. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  215. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  216. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  217. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  218. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  219. package/bundles/breeze-client.umd.js +0 -14094
  220. package/bundles/breeze-client.umd.js.map +0 -1
  221. package/bundles/breeze-client.umd.min.js +0 -16
  222. package/bundles/breeze-client.umd.min.js.map +0 -1
  223. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  224. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  225. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  226. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  227. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  228. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  229. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  230. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  231. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  232. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  233. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  234. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  235. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  236. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  237. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -459
  238. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  239. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -93
  240. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  241. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  242. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  243. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  244. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  245. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  246. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  247. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  248. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  249. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  250. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  251. package/esm2015/breeze-client.js +0 -9
  252. package/esm2015/index.js +0 -2
  253. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  254. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  255. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  256. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  257. package/esm2015/public_api.js +0 -2
  258. package/esm2015/src/abstract-data-service-adapter.js +0 -296
  259. package/esm2015/src/array.js +0 -4
  260. package/esm2015/src/assert-param.js +0 -312
  261. package/esm2015/src/breeze.js +0 -85
  262. package/esm2015/src/complex-array.js +0 -119
  263. package/esm2015/src/config.js +0 -223
  264. package/esm2015/src/core.js +0 -706
  265. package/esm2015/src/csdl-metadata-parser.js +0 -385
  266. package/esm2015/src/data-service.js +0 -203
  267. package/esm2015/src/data-type.js +0 -444
  268. package/esm2015/src/default-property-interceptor.js +0 -459
  269. package/esm2015/src/entity-action.js +0 -45
  270. package/esm2015/src/entity-aspect.js +0 -806
  271. package/esm2015/src/entity-group.js +0 -187
  272. package/esm2015/src/entity-key.js +0 -116
  273. package/esm2015/src/entity-manager.js +0 -2094
  274. package/esm2015/src/entity-metadata.js +0 -2109
  275. package/esm2015/src/entity-query.js +0 -996
  276. package/esm2015/src/entity-state.js +0 -99
  277. package/esm2015/src/enum.js +0 -141
  278. package/esm2015/src/event.js +0 -256
  279. package/esm2015/src/interface-registry.js +0 -41
  280. package/esm2015/src/key-generator.js +0 -108
  281. package/esm2015/src/local-query-comparison-options.js +0 -65
  282. package/esm2015/src/mapping-context.js +0 -405
  283. package/esm2015/src/naming-convention.js +0 -88
  284. package/esm2015/src/observable-array.js +0 -185
  285. package/esm2015/src/predicate.js +0 -1235
  286. package/esm2015/src/primitive-array.js +0 -87
  287. package/esm2015/src/query-options.js +0 -152
  288. package/esm2015/src/relation-array.js +0 -175
  289. package/esm2015/src/save-options.js +0 -41
  290. package/esm2015/src/unattached-children-map.js +0 -58
  291. package/esm2015/src/validate.js +0 -991
  292. package/esm2015/src/validation-options.js +0 -64
  293. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  294. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  295. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  296. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  297. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  298. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  299. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  300. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  301. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  302. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  303. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  304. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  305. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  306. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  307. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +0 -466
  308. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  309. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -98
  310. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  311. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  312. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  313. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  314. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  315. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  316. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  317. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  318. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  319. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  320. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  321. package/esm5/breeze-client.js +0 -9
  322. package/esm5/index.js +0 -2
  323. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  324. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  325. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  326. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  327. package/esm5/public_api.js +0 -2
  328. package/esm5/src/abstract-data-service-adapter.js +0 -302
  329. package/esm5/src/array.js +0 -4
  330. package/esm5/src/assert-param.js +0 -317
  331. package/esm5/src/breeze.js +0 -85
  332. package/esm5/src/complex-array.js +0 -119
  333. package/esm5/src/config.js +0 -228
  334. package/esm5/src/core.js +0 -714
  335. package/esm5/src/csdl-metadata-parser.js +0 -385
  336. package/esm5/src/data-service.js +0 -207
  337. package/esm5/src/data-type.js +0 -451
  338. package/esm5/src/default-property-interceptor.js +0 -459
  339. package/esm5/src/entity-action.js +0 -52
  340. package/esm5/src/entity-aspect.js +0 -812
  341. package/esm5/src/entity-group.js +0 -189
  342. package/esm5/src/entity-key.js +0 -118
  343. package/esm5/src/entity-manager.js +0 -2112
  344. package/esm5/src/entity-metadata.js +0 -2144
  345. package/esm5/src/entity-query.js +0 -1023
  346. package/esm5/src/entity-state.js +0 -106
  347. package/esm5/src/enum.js +0 -144
  348. package/esm5/src/event.js +0 -259
  349. package/esm5/src/interface-registry.js +0 -43
  350. package/esm5/src/key-generator.js +0 -111
  351. package/esm5/src/local-query-comparison-options.js +0 -67
  352. package/esm5/src/mapping-context.js +0 -407
  353. package/esm5/src/naming-convention.js +0 -90
  354. package/esm5/src/observable-array.js +0 -201
  355. package/esm5/src/predicate.js +0 -1300
  356. package/esm5/src/primitive-array.js +0 -87
  357. package/esm5/src/query-options.js +0 -167
  358. package/esm5/src/relation-array.js +0 -175
  359. package/esm5/src/save-options.js +0 -43
  360. package/esm5/src/unattached-children-map.js +0 -60
  361. package/esm5/src/validate.js +0 -996
  362. package/esm5/src/validation-options.js +0 -66
  363. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  364. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  365. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  366. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  367. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  368. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  369. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  370. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  371. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  372. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  373. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  374. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  375. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  376. package/fesm2015/breeze-client.js.map +0 -1
  377. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  378. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  379. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  380. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  381. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  382. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  383. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  384. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  385. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  386. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  387. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  388. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  389. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  390. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  391. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  392. package/fesm5/breeze-client.js.map +0 -1
  393. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  394. package/mixin-get-entity-graph/package.json +0 -13
  395. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  396. package/mixin-save-queuing/package.json +0 -13
  397. package/public_api.d.ts +0 -1
@@ -1,444 +0,0 @@
1
- import { core } from './core';
2
- import { BreezeEnum } from './enum';
3
- import { Validator } from './validate';
4
- let _localTimeRegex = /.\d{3}$/;
5
- /**
6
- DataType is an 'Enum' containing all of the supported data types.
7
- @dynamic
8
- **/
9
- export class DataType extends BreezeEnum {
10
- static getComparableFn(dataType) {
11
- if (dataType && dataType.normalize) {
12
- return dataType.normalize;
13
- }
14
- else if (dataType === DataType.Time) {
15
- // durations must be converted to compare them
16
- return function (value) {
17
- return value && core.durationToSeconds(value);
18
- };
19
- }
20
- else {
21
- // TODO: __identity
22
- return function (value) {
23
- return value;
24
- };
25
- }
26
- }
27
- /** Returns the DataType for a specified EDM type name.
28
- **/
29
- static fromEdmDataType(typeName) {
30
- let dt;
31
- let parts = typeName.split(".");
32
- if (parts.length > 1) {
33
- let simpleName = parts[1];
34
- if (simpleName === "image") {
35
- // hack
36
- dt = DataType.Byte;
37
- }
38
- else if (parts.length === 2) {
39
- dt = DataType.fromName(simpleName) || DataType.Undefined;
40
- }
41
- else {
42
- // enum
43
- // dt = DataType.Int32;
44
- dt = DataType.String;
45
- }
46
- }
47
- return dt;
48
- }
49
- /** Returns the DataType for a specified input. */
50
- static fromValue(val) {
51
- if (core.isDate(val))
52
- return DataType.DateTime;
53
- switch (typeof val) {
54
- case "string":
55
- if (core.isGuid(val))
56
- return DataType.Guid;
57
- // the >3 below is a hack to insure that if we are inferring datatypes that
58
- // very short strings that are valid but unlikely ISO encoded Time's are treated as strings instead.
59
- else if (core.isDuration(val) && val.length > 3)
60
- return DataType.Time;
61
- else if (core.isDateString(val))
62
- return DataType.DateTime;
63
- return DataType.String;
64
- case "boolean":
65
- return DataType.Boolean;
66
- case "number":
67
- return DataType.Double;
68
- }
69
- return DataType.Undefined;
70
- }
71
- static parseTimeFromServer(source) {
72
- if (typeof source === 'string') {
73
- return source;
74
- }
75
- // ODATA v3 format
76
- if (source && source.__edmType === 'Edm.Time') {
77
- let seconds = Math.floor(source.ms / 1000);
78
- return 'PT' + seconds + 'S';
79
- }
80
- return source;
81
- }
82
- static parseDateAsUTC(source) {
83
- if (typeof source === 'string') {
84
- // convert to UTC string if no time zone specifier.
85
- let isLocalTime = _localTimeRegex.test(source);
86
- // var isLocalTime = !hasTimeZone(source);
87
- source = isLocalTime ? source + 'Z' : source;
88
- }
89
- source = new Date(Date.parse(source));
90
- return source;
91
- }
92
- /** Returns a raw value converted to the specified DataType */
93
- static parseRawValue(val, dataType) {
94
- // undefined values will be the default for most unmapped properties EXCEPT when they are set
95
- // in a jsonResultsAdapter ( an unusual use case).
96
- if (val === undefined)
97
- return undefined;
98
- if (!val)
99
- return val;
100
- if (dataType && dataType.parseRawValue) {
101
- val = dataType.parseRawValue(val);
102
- }
103
- return val;
104
- }
105
- /** @hidden @internal */
106
- // used during initialization; visible on instance for testing purposes.
107
- static _resetConstants() {
108
- DataType.constants = {
109
- stringPrefix: "K_",
110
- nextNumber: -1,
111
- nextNumberIncrement: -1
112
- };
113
- }
114
- }
115
- DataType.parseDateFromServer = (value) => DataType.parseDateAsUTC(value);
116
- DataType.String = new DataType({
117
- defaultValue: "",
118
- parse: coerceToString,
119
- fmtOData: fmtString,
120
- getNext: getNextString
121
- });
122
- DataType.Int64 = new DataType({
123
- defaultValue: 0,
124
- isNumeric: true,
125
- isInteger: true,
126
- quoteJsonOData: true,
127
- parse: coerceToInt,
128
- fmtOData: makeFloatFmt("L"),
129
- getNext: getNextNumber
130
- });
131
- DataType.Int32 = new DataType({
132
- defaultValue: 0,
133
- isNumeric: true,
134
- isInteger: true,
135
- parse: coerceToInt,
136
- fmtOData: fmtInt,
137
- getNext: getNextNumber
138
- });
139
- DataType.Int16 = new DataType({
140
- defaultValue: 0,
141
- isNumeric: true,
142
- isInteger: true,
143
- parse: coerceToInt,
144
- fmtOData: fmtInt,
145
- getNext: getNextNumber
146
- });
147
- DataType.Byte = new DataType({
148
- defaultValue: 0,
149
- isNumeric: true,
150
- isInteger: true,
151
- parse: coerceToInt,
152
- fmtOData: fmtInt
153
- });
154
- DataType.Decimal = new DataType({
155
- defaultValue: 0,
156
- isNumeric: true,
157
- quoteJsonOData: true,
158
- isFloat: true,
159
- parse: coerceToFloat,
160
- fmtOData: makeFloatFmt("m"),
161
- getNext: getNextNumber
162
- });
163
- DataType.Double = new DataType({
164
- defaultValue: 0,
165
- isNumeric: true,
166
- isFloat: true,
167
- parse: coerceToFloat,
168
- fmtOData: makeFloatFmt("d"),
169
- getNext: getNextNumber
170
- });
171
- DataType.Single = new DataType({
172
- defaultValue: 0,
173
- isNumeric: true,
174
- isFloat: true,
175
- parse: coerceToFloat,
176
- fmtOData: makeFloatFmt("f"),
177
- getNext: getNextNumber
178
- });
179
- DataType.DateTime = new DataType({
180
- defaultValue: new Date(1900, 0, 1),
181
- isDate: true,
182
- parse: coerceToDate,
183
- parseRawValue: parseRawDate,
184
- normalize: function (value) { return value && value.getTime && value.getTime(); },
185
- fmtOData: fmtDateTime,
186
- getNext: getNextDateTime,
187
- getConcurrencyValue: getConcurrencyDateTime
188
- });
189
- DataType.DateTimeOffset = new DataType({
190
- defaultValue: new Date(1900, 0, 1),
191
- isDate: true,
192
- parse: coerceToDate,
193
- parseRawValue: parseRawDate,
194
- normalize: function (value) { return value && value.getTime && value.getTime(); },
195
- fmtOData: fmtDateTimeOffset,
196
- getNext: getNextDateTime,
197
- getConcurrencyValue: getConcurrencyDateTime
198
- });
199
- DataType.Time = new DataType({
200
- defaultValue: "PT0S",
201
- fmtOData: fmtTime,
202
- parseRawValue: DataType.parseTimeFromServer
203
- });
204
- DataType.Boolean = new DataType({
205
- defaultValue: false,
206
- parse: coerceToBool,
207
- fmtOData: fmtBoolean
208
- });
209
- DataType.Guid = new DataType({
210
- defaultValue: "00000000-0000-0000-0000-000000000000",
211
- parse: coerceToGuid,
212
- fmtOData: fmtGuid,
213
- getNext: getNextGuid,
214
- parseRawValue: function (val) { return val.toLowerCase(); },
215
- getConcurrencyValue: core.getUuid
216
- });
217
- DataType.Binary = new DataType({
218
- defaultValue: null,
219
- fmtOData: fmtBinary,
220
- parseRawValue: parseRawBinary
221
- });
222
- DataType.Undefined = new DataType({
223
- defaultValue: undefined,
224
- fmtOData: fmtUndefined
225
- });
226
- DataType.prototype._$typeName = "DataType";
227
- Error['x'] = DataType._resetConstants();
228
- Error['x'] = DataType.resolveSymbols();
229
- Error['x'] = DataType.getSymbols().forEach((sym) => sym.validatorCtor = getValidatorCtor(sym));
230
- // private functions;
231
- function getValidatorCtor(dataType) {
232
- switch (dataType) {
233
- case DataType.String:
234
- return Validator.string;
235
- case DataType.Int64:
236
- return Validator.int64;
237
- case DataType.Int32:
238
- return Validator.int32;
239
- case DataType.Int16:
240
- return Validator.int16;
241
- case DataType.Decimal:
242
- return Validator.number;
243
- case DataType.Double:
244
- return Validator.number;
245
- case DataType.Single:
246
- return Validator.number;
247
- case DataType.DateTime:
248
- return Validator.date;
249
- case DataType.DateTimeOffset:
250
- return Validator.date;
251
- case DataType.Boolean:
252
- return Validator.bool;
253
- case DataType.Guid:
254
- return Validator.guid;
255
- case DataType.Byte:
256
- return Validator.byte;
257
- case DataType.Binary:
258
- // TODO: don't quite know how to validate this yet.
259
- return Validator.none;
260
- case DataType.Time:
261
- return Validator.duration;
262
- case DataType.Undefined:
263
- return Validator.none;
264
- }
265
- }
266
- function getNextString() {
267
- return DataType.constants.stringPrefix + getNextNumber().toString();
268
- }
269
- function getNextNumber() {
270
- let result = DataType.constants.nextNumber;
271
- DataType.constants.nextNumber += DataType.constants.nextNumberIncrement;
272
- return result;
273
- }
274
- function getNextGuid() {
275
- return core.getUuid();
276
- }
277
- function getNextDateTime() {
278
- return new Date();
279
- }
280
- function getConcurrencyDateTime(val) {
281
- // use the current datetime but insure that it is different from previous call.
282
- let dt = new Date();
283
- let dt2 = new Date();
284
- while (dt.getTime() === dt2.getTime()) {
285
- dt2 = new Date();
286
- }
287
- return dt2;
288
- }
289
- function coerceToString(source, sourceTypeName) {
290
- return (source == null) ? source : source.toString();
291
- }
292
- function coerceToGuid(source, sourceTypeName) {
293
- if (sourceTypeName === "string") {
294
- return source.trim().toLowerCase();
295
- }
296
- return source;
297
- }
298
- function coerceToInt(source, sourceTypeName) {
299
- if (sourceTypeName === "string") {
300
- let src = source.trim();
301
- if (src === "")
302
- return null;
303
- let val = parseInt(src, 10);
304
- return isNaN(val) ? source : val;
305
- }
306
- else if (sourceTypeName === "number") {
307
- return Math.round(source);
308
- }
309
- // do we want to coerce floats -> ints
310
- return source;
311
- }
312
- function coerceToFloat(source, sourceTypeName) {
313
- if (sourceTypeName === "string") {
314
- let src = source.trim();
315
- if (src === "")
316
- return null;
317
- let val = parseFloat(src);
318
- return isNaN(val) ? source : val;
319
- }
320
- return source;
321
- }
322
- function coerceToDate(source, sourceTypeName) {
323
- let val;
324
- if (sourceTypeName === "string") {
325
- let src = source.trim();
326
- if (src === "")
327
- return null;
328
- val = new Date(Date.parse(src));
329
- return core.isDate(val) ? val : source;
330
- }
331
- else if (sourceTypeName === "number") {
332
- val = new Date(source);
333
- return core.isDate(val) ? val : source;
334
- }
335
- return source;
336
- }
337
- function coerceToBool(source, sourceTypeName) {
338
- if (sourceTypeName === "string") {
339
- let src = source.trim().toLowerCase();
340
- if (src === "false" || src === "") {
341
- return false;
342
- }
343
- else if (src === "true") {
344
- return true;
345
- }
346
- else {
347
- return source;
348
- }
349
- }
350
- return source;
351
- }
352
- function fmtString(val) {
353
- return val == null ? null : "'" + val.replace(/'/g, "''") + "'";
354
- }
355
- function fmtInt(val) {
356
- return val == null ? null : ((typeof val === "string") ? parseInt(val, 10) : val);
357
- }
358
- function makeFloatFmt(fmtSuffix) {
359
- return function (val) {
360
- if (val == null)
361
- return null;
362
- if (typeof val === "string") {
363
- val = parseFloat(val);
364
- }
365
- return val + fmtSuffix;
366
- };
367
- }
368
- function fmtDateTime(val) {
369
- if (val == null)
370
- return null;
371
- try {
372
- return "datetime'" + val.toISOString() + "'";
373
- }
374
- catch (e) {
375
- throwError("'%1' is not a valid dateTime", val);
376
- }
377
- }
378
- function fmtDateTimeOffset(val) {
379
- if (val == null)
380
- return null;
381
- try {
382
- return "datetimeoffset'" + val.toISOString() + "'";
383
- }
384
- catch (e) {
385
- throwError("'%1' is not a valid dateTime", val);
386
- }
387
- }
388
- function fmtTime(val) {
389
- if (val == null)
390
- return null;
391
- if (!core.isDuration(val)) {
392
- throwError("'%1' is not a valid ISO 8601 duration", val);
393
- }
394
- return "time'" + val + "'";
395
- }
396
- function fmtGuid(val) {
397
- if (val == null)
398
- return null;
399
- if (!core.isGuid(val)) {
400
- throwError("'%1' is not a valid guid", val);
401
- }
402
- return "guid'" + val + "'";
403
- }
404
- function fmtBoolean(val) {
405
- if (val == null)
406
- return null;
407
- if (typeof val === "string") {
408
- return val.trim().toLowerCase() === "true";
409
- }
410
- else {
411
- return !!val;
412
- }
413
- }
414
- function fmtBinary(val) {
415
- if (val == null)
416
- return val;
417
- return "binary'" + val + "'";
418
- }
419
- // TODO: use __identity instead;
420
- function fmtUndefined(val) {
421
- return val;
422
- }
423
- function throwError(msg, val) {
424
- msg = core.formatString(msg, val);
425
- throw new Error(msg);
426
- }
427
- function parseRawDate(val) {
428
- if (!core.isDate(val)) {
429
- val = DataType.parseDateFromServer(val);
430
- }
431
- return val;
432
- }
433
- function parseRawBinary(val) {
434
- if (val && val.$value !== undefined) {
435
- val = val.$value; // this will be a byte[] encoded as a string
436
- }
437
- return val;
438
- }
439
- //function hasTimeZone(source) {
440
- // var ix = source.indexOf("T");
441
- // var timePart = source.substring(ix+1);
442
- // return timePart.indexOf("-") >= 0 || timePart.indexOf("+") >= 0 || timePart.indexOf("Z");
443
- //}
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10eXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsVUFBVTtJQWdMdEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFtQjtRQUN4QyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUMzQjthQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDckMsOENBQThDO1lBQzlDLE9BQU8sVUFBVSxLQUFVO2dCQUN6QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLG1CQUFtQjtZQUNuQixPQUFPLFVBQVUsS0FBVTtnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDtPQUNHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFnQjtRQUNyQyxJQUFJLEVBQXdCLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLFVBQVUsS0FB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ekM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFRO0lBQzlCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ25DLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsNENBQTRDO0tBQy9EO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLGlDQUFpQztBQUNqQywwQ0FBMEM7QUFDMUMsOEZBQThGO0FBQzlGLEdBQUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgQnJlZXplRW51bSB9IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5cclxubGV0IF9sb2NhbFRpbWVSZWdleCA9IC8uXFxkezN9JC87XHJcblxyXG4vKiogIFxyXG5EYXRhVHlwZSBpcyBhbiAnRW51bScgY29udGFpbmluZyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxyXG5AZHluYW1pY1xyXG4qKi9cclxuZXhwb3J0IGNsYXNzIERhdGFUeXBlIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcbiAgLyoqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgRGF0YVR5cGUuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgZGVmYXVsdFZhbHVlPzogYW55O1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgYSAnbnVtZXJpYycgRGF0YVR5cGUuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgaXNOdW1lcmljPzogYm9vbGVhbjtcclxuICAvKiogV2hldGhlciB0aGlzIGlzIGFuICdpbnRlZ2VyJyBEYXRhVHlwZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBpc0ludGVnZXI/OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRvIHF1b3RlIHRoZSBqc29uIHZhbHVlIHdoZW4gZm9ybWF0dGluZyB0aGlzIERhdGFUeXBlIGZvciBPRGF0YS4gKi9cclxuICBxdW90ZUpzb25PRGF0YT86IGJvb2xlYW47XHJcbiAgLyoqIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBjcmVhdGUgYSBbW1ZhbGlkYXRvcl1dIHRvIGJlIHVzZWQgaW4gdmFsaWRhdGluZyBpbnN0YW5jZXMgb2YgdGhpcyBEYXRhVHlwZS4gKi9cclxuICB2YWxpZGF0b3JDdG9yPyhjb250ZXh0PzogYW55KTogVmFsaWRhdG9yO1xyXG4gIC8qKiBcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBub3JtYWxpemUgYSBkYXRhIHZhbHVlIGZvciBjb21wYXJpc29uLCBpZiBpdHMgdmFsdWUgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkuIFxyXG4gIE5vdGUgdGhhdCB0aGlzIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhIHByb3BlcnR5IGlzIGNoYW5nZWQsIHNvIG1ha2UgaXQgZmFzdC5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlXHJcbiAgKiovXHJcbiAgbm9ybWFsaXplPyh2YWx1ZTogYW55KTogYW55O1xyXG4gIC8qKlxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSByYXcgKHNlcnZlcikgdmFsdWUgZnJvbSBzdHJpbmcgdG8gdGhpcyBEYXRhVHlwZS5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlXHJcbiAgKiovXHJcbiAgcGFyc2VSYXdWYWx1ZT8odmFsdWU6IGFueSk6IGFueTtcclxuICAvKipcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBjb252ZXJ0IGEgdmFsdWUgZnJvbSBzdHJpbmcgdG8gdGhpcyBEYXRhVHlwZS4gIE5vdGUgdGhhdCB0aGlzIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhIHByb3BlcnR5IGlzIGNoYW5nZWQsIHNvIG1ha2UgaXQgZmFzdC5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlIFxyXG4gICoqL1xyXG4gIHBhcnNlPyhzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZyk6IGFueTtcclxuICAvKiogXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZm9ybWF0IHRoaXMgRGF0YVR5cGUgZm9yIE9EYXRhIHF1ZXJpZXMuXHJcbiAgQHJldHVybiB2YWx1ZSBhcHByb3ByaWF0ZSBmb3IgT0RhdGEgcXVlcnkgICBcclxuICAqKi9cclxuICBmbXRPRGF0YT8odmFsdWU6IGFueSk6IGFueTtcclxuICAvKiogXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHZhbHVlIGZvciBrZXkgZ2VuZXJhdGlvbiwgaWYgdGhpcyBkYXRhdHlwZSBpcyB1c2VkIGFzIGEga2V5LiAgVXNlcyBhbiBpbnRlcm5hbCB0YWJsZSBvZiBwcmV2aW91cyB2YWx1ZXMuXHJcbiAgQHJldHVybiB2YWx1ZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBEYXRhVHlwZSBcclxuICAqKi9cclxuICBnZXROZXh0PygpOiBhbnk7XHJcbiAgLyoqXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHZhbHVlIHdoZW4gdGhlIGRhdGF0eXBlIGlzIHVzZWQgYXMgYSBjb25jdXJyZW5jeSBwcm9wZXJ0eS5cclxuICBAcGFyYW0gcHJldmlvdXNWYWx1ZVxyXG4gIEByZXR1cm4gdGhlIG5leHQgY29uY3VycmVuY3kgdmFsdWUsIHdoaWNoIG1heSBiZSBhIGZ1bmN0aW9uIG9mIHRoZSBwcmV2aW91c1ZhbHVlLlxyXG4gICoqL1xyXG4gIGdldENvbmN1cnJlbmN5VmFsdWU/KHByZXZpb3VzVmFsdWU/OiBhbnkpOiBhbnk7XHJcblxyXG4gIHN0YXRpYyBwYXJzZURhdGVGcm9tU2VydmVyID0gKHZhbHVlOiBhbnkpID0+IERhdGFUeXBlLnBhcnNlRGF0ZUFzVVRDKHZhbHVlKTtcclxuICAvLyBzYW1lIGVmZmVjdCBhcyBhYm92ZSBidXQgZG9lc24ndCBnaXZlIHJpZ2h0IFRTRE9DLlxyXG4gIC8vIHN0YXRpYyBwYXJzZURhdGVGcm9tU2VydmVyID0gRGF0YVR5cGUucGFyc2VEYXRlQXNVVEM7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBjb25zdGFudHM6IHsgc3RyaW5nUHJlZml4OiBzdHJpbmcsIG5leHROdW1iZXI6IG51bWJlciwgbmV4dE51bWJlckluY3JlbWVudDogbnVtYmVyIH07XHJcblxyXG4gIHN0YXRpYyBTdHJpbmcgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvU3RyaW5nLFxyXG4gICAgZm10T0RhdGE6IGZtdFN0cmluZyxcclxuICAgIGdldE5leHQ6IGdldE5leHRTdHJpbmdcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEludDY0ID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzSW50ZWdlcjogdHJ1ZSxcclxuICAgIHF1b3RlSnNvbk9EYXRhOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvSW50LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcIkxcIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBJbnQzMiA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0ludGVnZXI6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogZm10SW50LFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgSW50MTYgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNJbnRlZ2VyOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvSW50LFxyXG4gICAgZm10T0RhdGE6IGZtdEludCxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEJ5dGUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNJbnRlZ2VyOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvSW50LFxyXG4gICAgZm10T0RhdGE6IGZtdEludFxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRGVjaW1hbCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBxdW90ZUpzb25PRGF0YTogdHJ1ZSxcclxuICAgIGlzRmxvYXQ6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9GbG9hdCxcclxuICAgIGZtdE9EYXRhOiBtYWtlRmxvYXRGbXQoXCJtXCIpLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRG91YmxlID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzRmxvYXQ6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9GbG9hdCxcclxuICAgIGZtdE9EYXRhOiBtYWtlRmxvYXRGbXQoXCJkXCIpLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzRmxvYXQ6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9GbG9hdCxcclxuICAgIGZtdE9EYXRhOiBtYWtlRmxvYXRGbXQoXCJmXCIpLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRGF0ZVRpbWUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBuZXcgRGF0ZSgxOTAwLCAwLCAxKSxcclxuICAgIGlzRGF0ZTogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0RhdGUsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBwYXJzZVJhd0RhdGUsXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5nZXRUaW1lICYmIHZhbHVlLmdldFRpbWUoKTsgfSwgLy8gZGF0ZXMgZG9uJ3QgcGVyZm9ybSBlcXVhbGl0eSBjb21wYXJpc29ucyBwcm9wZXJseVxyXG4gICAgZm10T0RhdGE6IGZtdERhdGVUaW1lLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dERhdGVUaW1lLFxyXG4gICAgZ2V0Q29uY3VycmVuY3lWYWx1ZTogZ2V0Q29uY3VycmVuY3lEYXRlVGltZVxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgRGF0ZVRpbWVPZmZzZXQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBuZXcgRGF0ZSgxOTAwLCAwLCAxKSxcclxuICAgIGlzRGF0ZTogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0RhdGUsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBwYXJzZVJhd0RhdGUsXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7IHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5nZXRUaW1lICYmIHZhbHVlLmdldFRpbWUoKTsgfSwgLy8gZGF0ZXMgZG9uJ3QgcGVyZm9ybSBlcXVhbGl0eSBjb21wYXJpc29ucyBwcm9wZXJseVxyXG4gICAgZm10T0RhdGE6IGZtdERhdGVUaW1lT2Zmc2V0LFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dERhdGVUaW1lLFxyXG4gICAgZ2V0Q29uY3VycmVuY3lWYWx1ZTogZ2V0Q29uY3VycmVuY3lEYXRlVGltZVxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgVGltZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiUFQwU1wiLFxyXG4gICAgZm10T0RhdGE6IGZtdFRpbWUsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBEYXRhVHlwZS5wYXJzZVRpbWVGcm9tU2VydmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBCb29sZWFuID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXHJcbiAgICBwYXJzZTogY29lcmNlVG9Cb29sLFxyXG4gICAgZm10T0RhdGE6IGZtdEJvb2xlYW5cclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEd1aWQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvR3VpZCxcclxuICAgIGZtdE9EYXRhOiBmbXRHdWlkLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dEd1aWQsXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBmdW5jdGlvbiAodmFsOiBzdHJpbmcpIHsgcmV0dXJuIHZhbC50b0xvd2VyQ2FzZSgpOyB9LFxyXG4gICAgZ2V0Q29uY3VycmVuY3lWYWx1ZTogY29yZS5nZXRVdWlkXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBCaW5hcnkgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxyXG4gICAgZm10T0RhdGE6IGZtdEJpbmFyeSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IHBhcnNlUmF3QmluYXJ5XHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBVbmRlZmluZWQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXHJcbiAgICBmbXRPRGF0YTogZm10VW5kZWZpbmVkXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBnZXRDb21wYXJhYmxlRm4oZGF0YVR5cGU/OiBEYXRhVHlwZSkge1xyXG4gICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLm5vcm1hbGl6ZSkge1xyXG4gICAgICByZXR1cm4gZGF0YVR5cGUubm9ybWFsaXplO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PT0gRGF0YVR5cGUuVGltZSkge1xyXG4gICAgICAvLyBkdXJhdGlvbnMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gY29tcGFyZSB0aGVtXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBjb3JlLmR1cmF0aW9uVG9TZWNvbmRzKHZhbHVlKTtcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFRPRE86IF9faWRlbnRpdHlcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIERhdGFUeXBlIGZvciBhIHNwZWNpZmllZCBFRE0gdHlwZSBuYW1lLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBmcm9tRWRtRGF0YVR5cGUodHlwZU5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IGR0OiBEYXRhVHlwZSB8IHVuZGVmaW5lZDtcclxuICAgIGxldCBwYXJ0cyA9IHR5cGVOYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBzaW1wbGVOYW1lID0gcGFydHNbMV07XHJcbiAgICAgIGlmIChzaW1wbGVOYW1lID09PSBcImltYWdlXCIpIHtcclxuICAgICAgICAvLyBoYWNrXHJcbiAgICAgICAgZHQgPSBEYXRhVHlwZS5CeXRlO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgIGR0ID0gRGF0YVR5cGUuZnJvbU5hbWUoc2ltcGxlTmFtZSkgfHwgRGF0YVR5cGUuVW5kZWZpbmVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGVudW1cclxuICAgICAgICAvLyBkdCA9IERhdGFUeXBlLkludDMyO1xyXG4gICAgICAgIGR0ID0gRGF0YVR5cGUuU3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIERhdGFUeXBlIGZvciBhIHNwZWNpZmllZCBpbnB1dC4gKi9cclxuICBzdGF0aWMgZnJvbVZhbHVlKHZhbDogYW55KSB7XHJcbiAgICBpZiAoY29yZS5pc0RhdGUodmFsKSkgcmV0dXJuIERhdGFUeXBlLkRhdGVUaW1lO1xyXG4gICAgc3dpdGNoICh0eXBlb2YgdmFsKSB7XHJcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICBpZiAoY29yZS5pc0d1aWQodmFsKSkgcmV0dXJuIERhdGFUeXBlLkd1aWQ7XHJcbiAgICAgICAgLy8gdGhlID4zIGJlbG93IGlzIGEgaGFjayB0byBpbnN1cmUgdGhhdCBpZiB3ZSBhcmUgaW5mZXJyaW5nIGRhdGF0eXBlcyB0aGF0XHJcbiAgICAgICAgLy8gdmVyeSBzaG9ydCBzdHJpbmdzIHRoYXQgYXJlIHZhbGlkIGJ1dCB1bmxpa2VseSBJU08gZW5jb2RlZCBUaW1lJ3MgYXJlIHRyZWF0ZWQgYXMgc3RyaW5ncyBpbnN0ZWFkLlxyXG4gICAgICAgIGVsc2UgaWYgKGNvcmUuaXNEdXJhdGlvbih2YWwpICYmIHZhbC5sZW5ndGggPiAzKSByZXR1cm4gRGF0YVR5cGUuVGltZTtcclxuICAgICAgICBlbHNlIGlmIChjb3JlLmlzRGF0ZVN0cmluZyh2YWwpKSByZXR1cm4gRGF0YVR5cGUuRGF0ZVRpbWU7XHJcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLlN0cmluZztcclxuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICByZXR1cm4gRGF0YVR5cGUuQm9vbGVhbjtcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5Eb3VibGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGF0YVR5cGUuVW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHBhcnNlVGltZUZyb21TZXJ2ZXIoc291cmNlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgLy8gT0RBVEEgdjMgZm9ybWF0XHJcbiAgICBpZiAoc291cmNlICYmIHNvdXJjZS5fX2VkbVR5cGUgPT09ICdFZG0uVGltZScpIHtcclxuICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKHNvdXJjZS5tcyAvIDEwMDApO1xyXG4gICAgICByZXR1cm4gJ1BUJyArIHNlY29uZHMgKyAnUyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc291cmNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHBhcnNlRGF0ZUFzVVRDKHNvdXJjZTogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgLy8gY29udmVydCB0byBVVEMgc3RyaW5nIGlmIG5vIHRpbWUgem9uZSBzcGVjaWZpZXIuXHJcbiAgICAgIGxldCBpc0xvY2FsVGltZSA9IF9sb2NhbFRpbWVSZWdleC50ZXN0KHNvdXJjZSk7XHJcbiAgICAgIC8vIHZhciBpc0xvY2FsVGltZSA9ICFoYXNUaW1lWm9uZShzb3VyY2UpO1xyXG4gICAgICBzb3VyY2UgPSBpc0xvY2FsVGltZSA/IHNvdXJjZSArICdaJyA6IHNvdXJjZTtcclxuICAgIH1cclxuICAgIHNvdXJjZSA9IG5ldyBEYXRlKERhdGUucGFyc2Uoc291cmNlKSk7XHJcbiAgICByZXR1cm4gc291cmNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBSZXR1cm5zIGEgcmF3IHZhbHVlIGNvbnZlcnRlZCB0byB0aGUgc3BlY2lmaWVkIERhdGFUeXBlICovXHJcbiAgc3RhdGljIHBhcnNlUmF3VmFsdWUodmFsOiBhbnksIGRhdGFUeXBlPzogRGF0YVR5cGUpIHtcclxuICAgIC8vIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBmb3IgbW9zdCB1bm1hcHBlZCBwcm9wZXJ0aWVzIEVYQ0VQVCB3aGVuIHRoZXkgYXJlIHNldFxyXG4gICAgLy8gaW4gYSBqc29uUmVzdWx0c0FkYXB0ZXIgKCBhbiB1bnVzdWFsIHVzZSBjYXNlKS5cclxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmICghdmFsKSByZXR1cm4gdmFsO1xyXG4gICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLnBhcnNlUmF3VmFsdWUpIHtcclxuICAgICAgdmFsID0gZGF0YVR5cGUucGFyc2VSYXdWYWx1ZSh2YWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIC8vIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uOyB2aXNpYmxlIG9uIGluc3RhbmNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxyXG4gIHN0YXRpYyBfcmVzZXRDb25zdGFudHMoKSB7XHJcbiAgICBEYXRhVHlwZS5jb25zdGFudHMgPSB7XHJcbiAgICAgIHN0cmluZ1ByZWZpeDogXCJLX1wiLFxyXG4gICAgICBuZXh0TnVtYmVyOiAtMSxcclxuICAgICAgbmV4dE51bWJlckluY3JlbWVudDogLTFcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBOT1QgWUVUIE5FRURFRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHZhciBfdXRjT2Zmc2V0TXMgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xyXG5cclxuICAvL0RhdGFUeXBlLnBhcnNlRGF0ZUFzTG9jYWwgPSBmdW5jdGlvbiAoc291cmNlKSB7XHJcbiAgLy8gICAgdmFyIGR0ID0gRGF0YVR5cGUucGFyc2VEYXRlc0FzVVRDKHNvdXJjZSk7XHJcbiAgLy8gICAgaWYgKF9faXNEYXRlKGR0KSkge1xyXG4gIC8vICAgICAgICBkdCA9IG5ldyBEYXRlKGR0LmdldFRpbWUoKSArIF91dGNPZmZzZXRNcyk7XHJcbiAgLy8gICAgfVxyXG4gIC8vICAgIHJldHVybiBkdDtcclxuICAvL307XHJcbn1cclxuRGF0YVR5cGUucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIkRhdGFUeXBlXCI7XHJcbkVycm9yWyd4J10gPSBEYXRhVHlwZS5fcmVzZXRDb25zdGFudHMoKTtcclxuRXJyb3JbJ3gnXSA9IERhdGFUeXBlLnJlc29sdmVTeW1ib2xzKCk7XHJcbkVycm9yWyd4J10gPSBEYXRhVHlwZS5nZXRTeW1ib2xzKCkuZm9yRWFjaCgoc3ltOiBEYXRhVHlwZSkgPT4gc3ltLnZhbGlkYXRvckN0b3IgPSBnZXRWYWxpZGF0b3JDdG9yKHN5bSkpO1xyXG5cclxuLy8gcHJpdmF0ZSBmdW5jdGlvbnM7XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0VmFsaWRhdG9yQ3RvcihkYXRhVHlwZTogRGF0YVR5cGUpIHtcclxuICBzd2l0Y2ggKGRhdGFUeXBlKSB7XHJcbiAgICBjYXNlIERhdGFUeXBlLlN0cmluZzpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5zdHJpbmc7XHJcbiAgICBjYXNlIERhdGFUeXBlLkludDY0OlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmludDY0O1xyXG4gICAgY2FzZSBEYXRhVHlwZS5JbnQzMjpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5pbnQzMjtcclxuICAgIGNhc2UgRGF0YVR5cGUuSW50MTY6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuaW50MTY7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRlY2ltYWw6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IubnVtYmVyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5Eb3VibGU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IubnVtYmVyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5TaW5nbGU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IubnVtYmVyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5kYXRlO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZU9mZnNldDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5kYXRlO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5Cb29sZWFuOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmJvb2w7XHJcbiAgICBjYXNlIERhdGFUeXBlLkd1aWQ6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuZ3VpZDtcclxuICAgIGNhc2UgRGF0YVR5cGUuQnl0ZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ieXRlO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5CaW5hcnk6XHJcbiAgICAgIC8vIFRPRE86IGRvbid0IHF1aXRlIGtub3cgaG93IHRvIHZhbGlkYXRlIHRoaXMgeWV0LlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLm5vbmU7XHJcbiAgICBjYXNlIERhdGFUeXBlLlRpbWU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuZHVyYXRpb247XHJcbiAgICBjYXNlIERhdGFUeXBlLlVuZGVmaW5lZDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ub25lO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmV4dFN0cmluZygpIHtcclxuICByZXR1cm4gRGF0YVR5cGUuY29uc3RhbnRzLnN0cmluZ1ByZWZpeCArIGdldE5leHROdW1iZXIoKS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROZXh0TnVtYmVyKCkge1xyXG4gIGxldCByZXN1bHQgPSBEYXRhVHlwZS5jb25zdGFudHMubmV4dE51bWJlcjtcclxuICBEYXRhVHlwZS5jb25zdGFudHMubmV4dE51bWJlciArPSBEYXRhVHlwZS5jb25zdGFudHMubmV4dE51bWJlckluY3JlbWVudDtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROZXh0R3VpZCgpIHtcclxuICByZXR1cm4gY29yZS5nZXRVdWlkKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5leHREYXRlVGltZSgpIHtcclxuICByZXR1cm4gbmV3IERhdGUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29uY3VycmVuY3lEYXRlVGltZSh2YWw6IGFueSkge1xyXG4gIC8vIHVzZSB0aGUgY3VycmVudCBkYXRldGltZSBidXQgaW5zdXJlIHRoYXQgaXQgaXMgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgY2FsbC5cclxuICBsZXQgZHQgPSBuZXcgRGF0ZSgpO1xyXG4gIGxldCBkdDIgPSBuZXcgRGF0ZSgpO1xyXG4gIHdoaWxlIChkdC5nZXRUaW1lKCkgPT09IGR0Mi5nZXRUaW1lKCkpIHtcclxuICAgIGR0MiA9IG5ldyBEYXRlKCk7XHJcbiAgfVxyXG4gIHJldHVybiBkdDI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvU3RyaW5nKHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZT86IHN0cmluZykge1xyXG4gIHJldHVybiAoc291cmNlID09IG51bGwpID8gc291cmNlIDogc291cmNlLnRvU3RyaW5nKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvR3VpZChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgcmV0dXJuIHNvdXJjZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9JbnQoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpO1xyXG4gICAgaWYgKHNyYyA9PT0gXCJcIikgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgdmFsID0gcGFyc2VJbnQoc3JjLCAxMCk7XHJcbiAgICByZXR1cm4gaXNOYU4odmFsKSA/IHNvdXJjZSA6IHZhbDtcclxuICB9IGVsc2UgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcIm51bWJlclwiKSB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzb3VyY2UpO1xyXG4gIH1cclxuICAvLyBkbyB3ZSB3YW50IHRvIGNvZXJjZSBmbG9hdHMgLT4gaW50c1xyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvRmxvYXQoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpO1xyXG4gICAgaWYgKHNyYyA9PT0gXCJcIikgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgdmFsID0gcGFyc2VGbG9hdChzcmMpO1xyXG4gICAgcmV0dXJuIGlzTmFOKHZhbCkgPyBzb3VyY2UgOiB2YWw7XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvRGF0ZShzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGxldCB2YWw6IGFueTtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpO1xyXG4gICAgaWYgKHNyYyA9PT0gXCJcIikgcmV0dXJuIG51bGw7XHJcbiAgICB2YWwgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHNyYykpO1xyXG4gICAgcmV0dXJuIGNvcmUuaXNEYXRlKHZhbCkgPyB2YWwgOiBzb3VyY2U7XHJcbiAgfSBlbHNlIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgdmFsID0gbmV3IERhdGUoc291cmNlKTtcclxuICAgIHJldHVybiBjb3JlLmlzRGF0ZSh2YWwpID8gdmFsIDogc291cmNlO1xyXG4gIH1cclxuICByZXR1cm4gc291cmNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb0Jvb2woc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoc3JjID09PSBcImZhbHNlXCIgfHwgc3JjID09PSBcIlwiKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoc3JjID09PSBcInRydWVcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdFN0cmluZyh2YWw6IGFueSkge1xyXG4gIHJldHVybiB2YWwgPT0gbnVsbCA/IG51bGwgOiBcIidcIiArIHZhbC5yZXBsYWNlKC8nL2csIFwiJydcIikgKyBcIidcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10SW50KHZhbDogYW55KSB7XHJcbiAgcmV0dXJuIHZhbCA9PSBudWxsID8gbnVsbCA6ICgodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikgPyBwYXJzZUludCh2YWwsIDEwKSA6IHZhbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VGbG9hdEZtdChmbXRTdWZmaXg6IHN0cmluZykge1xyXG4gIHJldHVybiBmdW5jdGlvbiAodmFsOiBhbnkpIHtcclxuICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsICsgZm10U3VmZml4O1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdERhdGVUaW1lKHZhbDogRGF0ZSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBcImRhdGV0aW1lJ1wiICsgdmFsLnRvSVNPU3RyaW5nKCkgKyBcIidcIjtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBkYXRlVGltZVwiLCB2YWwpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm10RGF0ZVRpbWVPZmZzZXQodmFsOiBEYXRlKSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIFwiZGF0ZXRpbWVvZmZzZXQnXCIgKyB2YWwudG9JU09TdHJpbmcoKSArIFwiJ1wiO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIGRhdGVUaW1lXCIsIHZhbCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRUaW1lKHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICBpZiAoIWNvcmUuaXNEdXJhdGlvbih2YWwpKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBJU08gODYwMSBkdXJhdGlvblwiLCB2YWwpO1xyXG4gIH1cclxuICByZXR1cm4gXCJ0aW1lJ1wiICsgdmFsICsgXCInXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdEd1aWQodmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIGlmICghY29yZS5pc0d1aWQodmFsKSkge1xyXG4gICAgdGhyb3dFcnJvcihcIiclMScgaXMgbm90IGEgdmFsaWQgZ3VpZFwiLCB2YWwpO1xyXG4gIH1cclxuICByZXR1cm4gXCJndWlkJ1wiICsgdmFsICsgXCInXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdEJvb2xlYW4odmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICByZXR1cm4gdmFsLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICEhdmFsO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm10QmluYXJ5KHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gdmFsO1xyXG4gIHJldHVybiBcImJpbmFyeSdcIiArIHZhbCArIFwiJ1wiO1xyXG59XHJcblxyXG4vLyBUT0RPOiB1c2UgX19pZGVudGl0eSBpbnN0ZWFkO1xyXG5mdW5jdGlvbiBmbXRVbmRlZmluZWQodmFsOiBhbnkpIHtcclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0aHJvd0Vycm9yKG1zZzogc3RyaW5nLCB2YWw6IGFueSkge1xyXG4gIG1zZyA9IGNvcmUuZm9ybWF0U3RyaW5nKG1zZywgdmFsKTtcclxuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VSYXdEYXRlKHZhbDogYW55KSB7XHJcbiAgaWYgKCFjb3JlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICB2YWwgPSBEYXRhVHlwZS5wYXJzZURhdGVGcm9tU2VydmVyKHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlUmF3QmluYXJ5KHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCAmJiB2YWwuJHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHZhbCA9IHZhbC4kdmFsdWU7IC8vIHRoaXMgd2lsbCBiZSBhIGJ5dGVbXSBlbmNvZGVkIGFzIGEgc3RyaW5nXHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbi8vZnVuY3Rpb24gaGFzVGltZVpvbmUoc291cmNlKSB7XHJcbi8vICB2YXIgaXggPSBzb3VyY2UuaW5kZXhPZihcIlRcIik7XHJcbi8vICB2YXIgdGltZVBhcnQgPSBzb3VyY2Uuc3Vic3RyaW5nKGl4KzEpO1xyXG4vLyAgcmV0dXJuICB0aW1lUGFydC5pbmRleE9mKFwiLVwiKSA+PSAwIHx8IHRpbWVQYXJ0LmluZGV4T2YoXCIrXCIpID49IDAgfHwgdGltZVBhcnQuaW5kZXhPZihcIlpcIik7XHJcbi8vfVxyXG5cclxuXHJcbiJdfQ==