@feedmepos/mf-payment 1.4.13 → 1.4.15
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.
- package/dist/DateRangePicker.vue_vue_type_script_setup_true_lang-XZ7OzGau.js +51 -0
- package/dist/{OnboardForm-C8tL8eRP.js → OnboardForm-B8n1f8uk.js} +2 -2
- package/dist/{OnboardForm-BCpzoQtJ.js → OnboardForm-BfFCsPbe.js} +2 -2
- package/dist/{OnboardSubmission-BejDPe_D.js → OnboardSubmission-CnC7fZjx.js} +1 -1
- package/dist/{OnboardSubmission-WaoA0lWa.js → OnboardSubmission-Dn3o1fPt.js} +1 -1
- package/dist/{PayoutAccount-QqDmqTbV.js → PayoutAccount-CwaW4rbs.js} +1 -1
- package/dist/{PayoutAccount-CNik_Qfp.js → PayoutAccount-DnRPm7FJ.js} +3 -3
- package/dist/{Settlement-CDky4U18.js → Settlement-BNp511_t.js} +1 -1
- package/dist/{Settlement-D_NGvD-c.js → Settlement-DAc2Eo53.js} +1 -1
- package/dist/{Transaction-CQyKCs8e.js → Transaction-BgbzqinB.js} +1 -1
- package/dist/{Transaction-D-QOxmW0.js → Transaction-DWM5OGo4.js} +1 -1
- package/dist/{TransactionOld-OxDTx7pV.js → TransactionOld-Cnourby9.js} +1 -1
- package/dist/{app-50K_oyr3.js → app-CtbCPTgi.js} +12 -12
- package/dist/app.js +1 -1
- package/dist/{index-D3oxDpEb.js → index-B8yCziOG.js} +1 -1
- package/dist/package.json +1 -1
- package/dist/{payout-account-BGJVH3K0.js → payout-account-Dj0I6mgY.js} +2 -2
- package/dist/{plugins-DoAPkpI4.js → plugins-B51dGfFM.js} +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/DateRangePicker.vue_vue_type_script_setup_true_lang-uBIWTMzo.js +0 -46
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { defineComponent as M, useModel as V, ref as _, computed as g, watch as v, resolveComponent as f, openBlock as h, createBlock as k, unref as a, withCtx as b, createVNode as C } from "vue";
|
|
2
|
+
import { z as x, a as d } from "./validator-D5jtpt9A.js";
|
|
3
|
+
import { h as l } from "./moment-h96o7c8I.js";
|
|
4
|
+
const y = /* @__PURE__ */ M({
|
|
5
|
+
__name: "DateRangePicker",
|
|
6
|
+
props: {
|
|
7
|
+
modelValue: { required: !0 },
|
|
8
|
+
modelModifiers: {}
|
|
9
|
+
},
|
|
10
|
+
emits: ["update:modelValue"],
|
|
11
|
+
setup(p) {
|
|
12
|
+
const i = V(p, "modelValue"), e = _(i.value || { startDate: "", endDate: "" }), D = g(() => e.value ? `${e.value.startDate ?? "Start"} ~ ${e.value.endDate ?? "End"}` : "No dates selected.");
|
|
13
|
+
return v(e, ({ startDate: s, endDate: n }) => {
|
|
14
|
+
const o = l(s, "YYYY-MM-DD"), r = l(n, "YYYY-MM-DD");
|
|
15
|
+
if (!o.isValid() || !r.isValid()) return !1;
|
|
16
|
+
const t = r.diff(o, "days");
|
|
17
|
+
t <= 30 && t >= 0 && (i.value = { startDate: s, endDate: n });
|
|
18
|
+
}), (s, n) => {
|
|
19
|
+
const o = f("FmChip"), r = f("FmSimpleDateRangePicker");
|
|
20
|
+
return h(), k(r, {
|
|
21
|
+
modelValue: e.value,
|
|
22
|
+
"onUpdate:modelValue": n[0] || (n[0] = (t) => e.value = t),
|
|
23
|
+
"show-predefined-range": "",
|
|
24
|
+
rules: a(x)(
|
|
25
|
+
a(d).object({
|
|
26
|
+
startDate: a(d).string(),
|
|
27
|
+
endDate: a(d).string()
|
|
28
|
+
}).refine(({ startDate: t, endDate: Y }) => {
|
|
29
|
+
const u = a(l)(t, "YYYY-MM-DD"), m = a(l)(Y, "YYYY-MM-DD");
|
|
30
|
+
if (!u.isValid() || !m.isValid()) return !1;
|
|
31
|
+
const c = m.diff(u, "days");
|
|
32
|
+
return c <= 30 && c >= 0;
|
|
33
|
+
}, {
|
|
34
|
+
message: "Date range cannot exceed 30 days"
|
|
35
|
+
})
|
|
36
|
+
)
|
|
37
|
+
}, {
|
|
38
|
+
"trigger-button": b(() => [
|
|
39
|
+
C(o, {
|
|
40
|
+
icon: "calendar_month",
|
|
41
|
+
label: D.value
|
|
42
|
+
}, null, 8, ["label"])
|
|
43
|
+
]),
|
|
44
|
+
_: 1
|
|
45
|
+
}, 8, ["modelValue", "rules"]);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
export {
|
|
50
|
+
y as _
|
|
51
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { defineComponent as $, ref as P, computed as O, resolveComponent as f, openBlock as y, createElementBlock as q, createElementVNode as s, toDisplayString as I, Fragment as z, createBlock as j, withCtx as c, createVNode as o, createCommentVNode as B, unref as e, createTextVNode as D, onMounted as X, resolveDynamicComponent as Z } from "vue";
|
|
2
|
-
import { o as T } from "./index-
|
|
2
|
+
import { o as T } from "./index-B8yCziOG.js";
|
|
3
3
|
import { u as M } from "./index-DVLqrR4d.js";
|
|
4
4
|
import { useRouter as h } from "vue-router";
|
|
5
5
|
import { z as u, a as d } from "./validator-D5jtpt9A.js";
|
|
6
|
-
import { P as ee } from "./payout-account-
|
|
6
|
+
import { P as ee } from "./payout-account-Dj0I6mgY.js";
|
|
7
7
|
import { P as le } from "./PDFViewer-DlSCBBxr.js";
|
|
8
8
|
import { s as te } from "./vue-signature-pad.esm-IXPjf4fL.js";
|
|
9
9
|
import { _ as ae } from "./Status.vue_vue_type_script_setup_true_lang-X-A4zImD.js";
|
|
@@ -2,12 +2,12 @@ import { defineComponent as U, ref as D, computed as vf, resolveComponent as w,
|
|
|
2
2
|
import { z as d, a as s } from "./validator-D5jtpt9A.js";
|
|
3
3
|
import { P as jf, _ as bf } from "./PDFViewer-DlSCBBxr.js";
|
|
4
4
|
import { useCoreStore as xf } from "@feedmepos/mf-common";
|
|
5
|
-
import { o as F } from "./index-
|
|
5
|
+
import { o as F } from "./index-B8yCziOG.js";
|
|
6
6
|
import { p as af } from "./index-C5gCZHen.js";
|
|
7
7
|
import { useSnackbar as df } from "@feedmepos/ui-library";
|
|
8
8
|
import { u as Af } from "./index-DVLqrR4d.js";
|
|
9
9
|
import { s as sf } from "./vue-signature-pad.esm-IXPjf4fL.js";
|
|
10
|
-
import { P as Lf } from "./payout-account-
|
|
10
|
+
import { P as Lf } from "./payout-account-Dj0I6mgY.js";
|
|
11
11
|
import { useRouter as yf } from "vue-router";
|
|
12
12
|
const uf = { class: "flex" }, pf = { class: "justify-self-center" }, Df = ["src"], o = /* @__PURE__ */ U({
|
|
13
13
|
__name: "UploadButton",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as A, ref as V, watch as v, computed as p, resolveComponent as x, openBlock as h, createBlock as w, withCtx as f, createElementVNode as S, createVNode as r, unref as l, isRef as n, h as k } from "vue";
|
|
2
|
-
import { o as K } from "./index-
|
|
2
|
+
import { o as K } from "./index-B8yCziOG.js";
|
|
3
3
|
import { p as m } from "./index-DVLqrR4d.js";
|
|
4
4
|
import { _ as O } from "./index.vue_vue_type_script_setup_true_lang-C7aGohmV.js";
|
|
5
5
|
import { useRouter as F } from "vue-router";
|
|
@@ -3,7 +3,7 @@ import { _ as q } from "./Layout.vue_vue_type_script_setup_true_lang-DJm5br5a.js
|
|
|
3
3
|
import { u as G, p as J, e as L } from "./index-DVLqrR4d.js";
|
|
4
4
|
import { useI18n as K, useCoreStore as Q } from "@feedmepos/mf-common";
|
|
5
5
|
import { _ as X } from "./RestaurantSelector.vue_vue_type_script_setup_true_lang-DyLnqQYe.js";
|
|
6
|
-
import { o as Z } from "./index-
|
|
6
|
+
import { o as Z } from "./index-B8yCziOG.js";
|
|
7
7
|
import { useRouter as w } from "vue-router";
|
|
8
8
|
import { i as ss } from "./softspace-25X2bjBx.js";
|
|
9
9
|
const es = { class: "flex justify-left items-center mb-6" }, ts = { class: "grid grid-cols-3 gap-6" }, os = { class: "flex items-center" }, ns = ["src"], is = { class: "px-16 text-sm flex-grow" }, rs = { class: "list-disc pl-6" }, ms = {
|
|
@@ -2,7 +2,7 @@ import { defineComponent as y, resolveComponent as u, openBlock as h, createBloc
|
|
|
2
2
|
import { u as O } from "./index-C9vSg8Xx.js";
|
|
3
3
|
import { p as K } from "./index-DVLqrR4d.js";
|
|
4
4
|
import { _ as A } from "./AdminLayout.vue_vue_type_script_setup_true_lang-BTmMOzwx.js";
|
|
5
|
-
import { P as V } from "./payout-account-
|
|
5
|
+
import { P as V } from "./payout-account-Dj0I6mgY.js";
|
|
6
6
|
import { p as D } from "./index-C5gCZHen.js";
|
|
7
7
|
import "@feedmepos/ui-library";
|
|
8
8
|
import { _ as T } from "./index.vue_vue_type_script_setup_true_lang-C7aGohmV.js";
|
|
@@ -3,12 +3,12 @@ import { p as K } from "./index-C5gCZHen.js";
|
|
|
3
3
|
import { p as U, u as gA, e as lA } from "./index-DVLqrR4d.js";
|
|
4
4
|
import { defineStore as rA } from "pinia";
|
|
5
5
|
import { useI18n as R, useCoreStore as eA } from "@feedmepos/mf-common";
|
|
6
|
-
import { c as cA, a as _, P as J } from "./payout-account-
|
|
6
|
+
import { c as cA, a as _, P as J } from "./payout-account-Dj0I6mgY.js";
|
|
7
7
|
import { useDialogChild as nA, useDialog as BA } from "@feedmepos/ui-library";
|
|
8
8
|
import { z as F, a as H } from "./validator-D5jtpt9A.js";
|
|
9
9
|
import { P as $ } from "./PDFViewer-DlSCBBxr.js";
|
|
10
|
-
import "./app-
|
|
11
|
-
import "./plugins-
|
|
10
|
+
import "./app-CtbCPTgi.js";
|
|
11
|
+
import "./plugins-B51dGfFM.js";
|
|
12
12
|
import { _ as uA } from "./Layout.vue_vue_type_script_setup_true_lang-DJm5br5a.js";
|
|
13
13
|
function wA() {
|
|
14
14
|
return {
|
|
@@ -9,7 +9,7 @@ import { useRouter as J } from "vue-router";
|
|
|
9
9
|
import { _ as j } from "./AdminLayout.vue_vue_type_script_setup_true_lang-BTmMOzwx.js";
|
|
10
10
|
import { u as z } from "./index-C9vSg8Xx.js";
|
|
11
11
|
import { u as G } from "./error-K1CakhA9.js";
|
|
12
|
-
import { _ as Q } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-
|
|
12
|
+
import { _ as Q } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-XZ7OzGau.js";
|
|
13
13
|
import "@feedmepos/mf-common";
|
|
14
14
|
const H = /* @__PURE__ */ M({
|
|
15
15
|
__name: "SettlementTable",
|
|
@@ -11,7 +11,7 @@ import { useRouter as L } from "vue-router";
|
|
|
11
11
|
import { u as J } from "./index-C9vSg8Xx.js";
|
|
12
12
|
import { _ as Q } from "./AsyncButton.vue_vue_type_script_setup_true_lang-DcjzvYwT.js";
|
|
13
13
|
import { _ as W } from "./RestaurantSelector.vue_vue_type_script_setup_true_lang-DyLnqQYe.js";
|
|
14
|
-
import { _ as G } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-
|
|
14
|
+
import { _ as G } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-XZ7OzGau.js";
|
|
15
15
|
const X = /* @__PURE__ */ C({
|
|
16
16
|
__name: "SettlementTable",
|
|
17
17
|
props: {
|
|
@@ -7,7 +7,7 @@ import { _ as j } from "./AsyncButton.vue_vue_type_script_setup_true_lang-DcjzvY
|
|
|
7
7
|
import { useSnackbar as z, useDialog as H } from "@feedmepos/ui-library";
|
|
8
8
|
import { w as q } from "./Modal-DB8M9o1T.js";
|
|
9
9
|
import { u as F } from "./error-K1CakhA9.js";
|
|
10
|
-
import { _ as J } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-
|
|
10
|
+
import { _ as J } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-XZ7OzGau.js";
|
|
11
11
|
import { g as W } from "./grafana-Ddr9UJ5i.js";
|
|
12
12
|
import { _ as X } from "./index.vue_vue_type_script_setup_true_lang-C7aGohmV.js";
|
|
13
13
|
import { e as D } from "./index-DVLqrR4d.js";
|
|
@@ -6,7 +6,7 @@ import { _ as X } from "./Layout.vue_vue_type_script_setup_true_lang-DJm5br5a.js
|
|
|
6
6
|
import { u as Z } from "./index-C9vSg8Xx.js";
|
|
7
7
|
import { _ as ee } from "./AsyncButton.vue_vue_type_script_setup_true_lang-DcjzvYwT.js";
|
|
8
8
|
import { _ as ae } from "./SelectAll.vue_vue_type_script_setup_true_lang-DA4rs3tk.js";
|
|
9
|
-
import { _ as te } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-
|
|
9
|
+
import { _ as te } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-XZ7OzGau.js";
|
|
10
10
|
import { p as ne } from "./index-C5gCZHen.js";
|
|
11
11
|
import { t as re } from "./index-Cm9gPHIH.js";
|
|
12
12
|
import { u as se, p as x } from "./index-DVLqrR4d.js";
|
|
@@ -12,7 +12,7 @@ import { _ as H } from "./Layout.vue_vue_type_script_setup_true_lang-DJm5br5a.js
|
|
|
12
12
|
import { u as W } from "./index-C9vSg8Xx.js";
|
|
13
13
|
import { _ as X } from "./AsyncButton.vue_vue_type_script_setup_true_lang-DcjzvYwT.js";
|
|
14
14
|
import { _ as Z } from "./RestaurantSelector.vue_vue_type_script_setup_true_lang-DyLnqQYe.js";
|
|
15
|
-
import { _ as aa } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-
|
|
15
|
+
import { _ as aa } from "./DateRangePicker.vue_vue_type_script_setup_true_lang-XZ7OzGau.js";
|
|
16
16
|
const ea = /* @__PURE__ */ S({
|
|
17
17
|
__name: "TransactionTable",
|
|
18
18
|
props: {
|
|
@@ -383,7 +383,7 @@ const Gn = {
|
|
|
383
383
|
sidebarDisplay: "Payout Accounts",
|
|
384
384
|
section: "payment-gateway"
|
|
385
385
|
},
|
|
386
|
-
component: () => import("./PayoutAccount-
|
|
386
|
+
component: () => import("./PayoutAccount-CwaW4rbs.js")
|
|
387
387
|
},
|
|
388
388
|
{
|
|
389
389
|
path: "/admin/payout-accounts/:accountId",
|
|
@@ -401,7 +401,7 @@ const Gn = {
|
|
|
401
401
|
sidebarDisplay: "Payment Onboarding",
|
|
402
402
|
section: "payment-gateway"
|
|
403
403
|
},
|
|
404
|
-
component: () => import("./OnboardSubmission-
|
|
404
|
+
component: () => import("./OnboardSubmission-CnC7fZjx.js")
|
|
405
405
|
},
|
|
406
406
|
{
|
|
407
407
|
path: "/admin/onboarding/:submissionId",
|
|
@@ -410,7 +410,7 @@ const Gn = {
|
|
|
410
410
|
meta: {
|
|
411
411
|
parent: "mf-payment-admin.onboard-submission"
|
|
412
412
|
},
|
|
413
|
-
component: () => import("./OnboardForm-
|
|
413
|
+
component: () => import("./OnboardForm-B8n1f8uk.js")
|
|
414
414
|
},
|
|
415
415
|
{
|
|
416
416
|
path: "/admin/terminal/pos",
|
|
@@ -481,7 +481,7 @@ const Gn = {
|
|
|
481
481
|
meta: {
|
|
482
482
|
sidebarDisplay: "Transactions"
|
|
483
483
|
},
|
|
484
|
-
component: () => import("./Transaction-
|
|
484
|
+
component: () => import("./Transaction-BgbzqinB.js")
|
|
485
485
|
},
|
|
486
486
|
{
|
|
487
487
|
path: "/admin/settlement",
|
|
@@ -489,7 +489,7 @@ const Gn = {
|
|
|
489
489
|
meta: {
|
|
490
490
|
sidebarDisplay: "Settlements"
|
|
491
491
|
},
|
|
492
|
-
component: () => import("./Settlement-
|
|
492
|
+
component: () => import("./Settlement-BNp511_t.js")
|
|
493
493
|
},
|
|
494
494
|
{
|
|
495
495
|
path: "/admin/settlement/:settlementId",
|
|
@@ -508,7 +508,7 @@ const Gn = {
|
|
|
508
508
|
{
|
|
509
509
|
path: "/payout-account",
|
|
510
510
|
name: "mf-payment-payout-account",
|
|
511
|
-
component: () => import("./PayoutAccount-
|
|
511
|
+
component: () => import("./PayoutAccount-DnRPm7FJ.js"),
|
|
512
512
|
meta: {
|
|
513
513
|
sidebarDisplay: "i18n:payment.routes.payout_account"
|
|
514
514
|
}
|
|
@@ -516,7 +516,7 @@ const Gn = {
|
|
|
516
516
|
{
|
|
517
517
|
path: "/onboard-submission",
|
|
518
518
|
name: "mf-payment-onboard-submission",
|
|
519
|
-
component: () => import("./OnboardSubmission-
|
|
519
|
+
component: () => import("./OnboardSubmission-Dn3o1fPt.js"),
|
|
520
520
|
meta: {
|
|
521
521
|
sidebarDisplay: "i18n:payment.routes.onboard_submission",
|
|
522
522
|
region: { MY: !0 }
|
|
@@ -526,7 +526,7 @@ const Gn = {
|
|
|
526
526
|
path: "/onboard-submission/:type/:submission?",
|
|
527
527
|
name: "mf-payment-onboard-submission-form",
|
|
528
528
|
props: !0,
|
|
529
|
-
component: () => import("./OnboardForm-
|
|
529
|
+
component: () => import("./OnboardForm-BfFCsPbe.js"),
|
|
530
530
|
meta: {
|
|
531
531
|
parent: "mf-payment-onboard-submission"
|
|
532
532
|
}
|
|
@@ -534,7 +534,7 @@ const Gn = {
|
|
|
534
534
|
{
|
|
535
535
|
path: "/transaction-old",
|
|
536
536
|
name: "mf-payment-old-transaction",
|
|
537
|
-
component: () => import("./TransactionOld-
|
|
537
|
+
component: () => import("./TransactionOld-Cnourby9.js"),
|
|
538
538
|
meta: {
|
|
539
539
|
sidebarDisplay: "i18n:payment.routes.transaction"
|
|
540
540
|
}
|
|
@@ -542,7 +542,7 @@ const Gn = {
|
|
|
542
542
|
{
|
|
543
543
|
path: "/transaction",
|
|
544
544
|
name: "mf-payment-transaction",
|
|
545
|
-
component: () => import("./Transaction-
|
|
545
|
+
component: () => import("./Transaction-DWM5OGo4.js"),
|
|
546
546
|
meta: {
|
|
547
547
|
sidebarDisplay: "i18n:payment.routes.transaction-new",
|
|
548
548
|
sidebarNew: !0
|
|
@@ -551,7 +551,7 @@ const Gn = {
|
|
|
551
551
|
{
|
|
552
552
|
path: "/settlement",
|
|
553
553
|
name: "mf-payment-settlement",
|
|
554
|
-
component: () => import("./Settlement-
|
|
554
|
+
component: () => import("./Settlement-DAc2Eo53.js"),
|
|
555
555
|
meta: {
|
|
556
556
|
sidebarDisplay: "i18n:payment.routes.settlement"
|
|
557
557
|
}
|
|
@@ -6828,7 +6828,7 @@ const Ra = /* @__PURE__ */ Mt({
|
|
|
6828
6828
|
};
|
|
6829
6829
|
}
|
|
6830
6830
|
});
|
|
6831
|
-
var Ca = { authClientId: "
|
|
6831
|
+
var Ca = { authClientId: "1a362d621873497b277ea55258cc82594ba148d235257f7bd44ea2acc132d8a4", googleMap: "AIzaSyA_isPR1-9bX7UmRiJIhsIRNNwdn6DdmW4", firebase: { apiKey: "AIzaSyAj8JdCHtP0Vc5vZobCfgoLzWxPIn0WUG4", authDomain: "feedme-dev-4c3ef.firebaseapp.com", databaseURL: "https://feedme-dev-4c3ef.firebaseio.com", projectId: "feedme-dev-4c3ef", storageBucket: "feedme-dev-4c3ef.appspot.com", messagingSenderId: "458797803788", appId: "1:458797803788:web:37f2af2926a84288f0c129", measurementId: "G-J2QG09D2Q7" }, assetBucketUrl: "feedme-dev-4c3ef.appspot.com" };
|
|
6832
6832
|
const xa = /* @__PURE__ */ Mt({
|
|
6833
6833
|
__name: "App",
|
|
6834
6834
|
setup(n) {
|
package/dist/app.js
CHANGED
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { f as j } from "./plugins-
|
|
1
|
+
import { f as j } from "./plugins-B51dGfFM.js";
|
|
2
2
|
import { c as st, a as it, B as at, p as E } from "./index-DVLqrR4d.js";
|
|
3
3
|
import { useCoreStore as ut } from "@feedmepos/mf-common";
|
|
4
|
-
import { _ as ot } from "./app-
|
|
4
|
+
import { _ as ot } from "./app-CtbCPTgi.js";
|
|
5
5
|
var Q = { exports: {} };
|
|
6
6
|
(function(i, a) {
|
|
7
7
|
(function(t, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as be, C as we, r as K, g as C, b as Te, c as ye, d as H, S as ke, e as Ee, F as Ae } from "./app-
|
|
1
|
+
import { a as be, C as we, r as K, g as C, b as Te, c as ye, d as H, S as ke, e as Ee, F as Ae } from "./app-CtbCPTgi.js";
|
|
2
2
|
/**
|
|
3
3
|
* @license
|
|
4
4
|
* Copyright 2017 Google LLC
|