@kvass/widgets 1.1.4 → 1.1.5
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/vimeo.js +2 -2
- package/dist/youtube.js +2 -2
- package/index.html +6 -0
- package/package.json +1 -1
- package/src/vimeo/components/Vimeo.ce.vue +41 -34
- package/src/youtube/components/Youtube.ce.vue +35 -11
package/dist/vimeo.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as
|
|
2
|
-
`,B={props:{url:{type:String,default:""},loop:{type:[String,Boolean],default:!0},autoplay:{type:[String,Boolean],default:!1},controls:{type:[String,Boolean],default:!0},mute:{type:[String,Boolean],default:!1},displayThumbnail:{type:[String,Boolean],default:!0},ignoreConsent:{type:[String,Boolean],default:!1},hideConsent:{type:[String,Boolean],default:!1},thumbnailSource:{type:String,default:""},consentBlockMessage:{type:String,default:"The video is blocked due to lack of consent to cookies"},consentButtonLabel:{type:String,default:"Edit consents"},aspectRatio:{type:String,default:"16/9"}},data(){return{ready:!1,
|
|
1
|
+
import{_ as v,o as n,c as r,z as l,A as m,k as g,w as h,a as d,y as c,B as y,C as k,t as u,d as w,q as b}from"./_plugin-vue_export-helper.js";import{E as p,L as _,W as S}from"./index.js";const x=`.widget-kvass-media-render-vimeo{height:100%;width:100%;position:relative}.widget-kvass-media-render-vimeo iframe{height:100%;width:100%}.widget-kvass-media-render-vimeo>*{position:absolute;top:0;left:0;width:100%;height:100%}.widget-kvass-media-render-vimeo__thumbnail{background-size:cover;background-repeat:no-repeat;background-position:center;filter:blur(10px);opacity:.7}.widget-kvass-media-render-vimeo__blocked{display:flex;justify-content:center;align-items:center;left:50%;top:50%;transform:translate(-50%,-50%)}.widget-kvass-media-render-vimeo__blocked svg{opacity:.3}@media (max-width: 992px){.widget-kvass-media-render-vimeo__blocked svg{font-size:2.5em}}.widget-kvass-media-render-vimeo__blocked-warning{pointer-events:initial;position:absolute;bottom:0;text-align:center;background-color:#f2f2f2;font-size:.6em;bottom:3rem;left:3rem;max-width:400px;font-size:.8em;padding:1.5em 2em}.widget-kvass-media-render-vimeo__blocked-warning-button{padding:.5rem;border:1px solid #818181;backdrop-filter:none;background-color:transparent}@media (max-width: 992px){.widget-kvass-media-render-vimeo__blocked-warning{left:.5rem;bottom:.5rem;font-size:.6em;max-width:200px}}.widget-kvass-media-render-vimeo .fade-enter-active,.widget-kvass-media-render-vimeo .fade-leave-active{transition:opacity .5s}.widget-kvass-media-render-vimeo .fade-enter,.widget-kvass-media-render-vimeo .fade-leave-to{opacity:0}
|
|
2
|
+
`,B={props:{url:{type:String,default:""},videoState:{type:String,default:"ready",enums:["ready ","play","pause"]},loop:{type:[String,Boolean],default:!0},autoplay:{type:[String,Boolean],default:!1},controls:{type:[String,Boolean],default:!0},mute:{type:[String,Boolean],default:!1},displayThumbnail:{type:[String,Boolean],default:!0},ignoreConsent:{type:[String,Boolean],default:!1},hideConsent:{type:[String,Boolean],default:!1},thumbnailSource:{type:String,default:""},consentBlockMessage:{type:String,default:"The video is blocked due to lack of consent to cookies"},consentButtonLabel:{type:String,default:"Edit consents"},aspectRatio:{type:String,default:"16/9"}},watch:{videoState:{handler(e,t){if(e!==t)switch(e){case"play":return this.play();case"pause":return this.pause();default:return}}}},data(){return{ready:!1,thumbnail:null,consents:[]}},computed:{kvassDefined(){return typeof Kvass<"u"},showConsent(){return this.hideConsent||!this.kvassDefined?!1:!this.ignoreConsent&&!this.consents.includes("statistics")},videoId(){if(!this.url)return;let e=[p(this.url,/https\:\/\/(w{3}\.)?vimeo\.com\/(.+)\/?/,{group:2}),p(this.url,/https\:\/\/(w{3}\.)?player\.vimeo\.com\/(video\/)?(.+)\/?/,{group:3})].find(t=>!!t);if(e)return e.split("&")[0]}},methods:{openConsent(){this.kvassDefined&&Kvass.emit("consent:show")},async play(){try{this.player.setVolume(0),await this.player.play()}catch(e){console.log(e)}},pause(){this.player.pause()},async init(){const e={url:`https://vimeo.com/${this.videoId}`,loop:this.loop,autoplay:this.autoplay,controls:this.controls,muted:this.mute||this.autoplay,playsinline:1,dnt:1};function t(i){return i==="false"?!1:i==="true"?!0:i}Object.entries(e).map(([i,a])=>e[i]=t(a)),_("https://player.vimeo.com/api/player.js");const s=await S(()=>window.Vimeo,{limit:100});this.player=new s.Player(this.$refs.vimeoPlayer,e),await this.player.ready().then(()=>{this.ready=!0}).catch(i=>{console.log(i)})}},async mounted(){this.init()}},C={key:0,class:"widget-kvass-media-render-vimeo__blocked"},z={class:"widget-kvass-media-render-vimeo__blocked-warning"};function V(e,t,s,i,a,o){return n(),r("div",{class:"widget-kvass-media-render-vimeo",style:c(`aspect-ratio: ${s.aspectRatio};`)},[l((n(),r("div",{key:o.videoId,ref:"vimeoPlayer",class:"widget-kvass-media-render-vimeo__embed",frameborder:"0",allow:"autoplay; fullscreen;",webkitallowfullscreen:"",mozallowfullscreen:""})),[[m,a.ready]]),g(y,{name:"fade",mode:"in-out"},{default:h(()=>[l(d("div",{class:"widget-kvass-media-render-vimeo__thumbnail",style:c({backgroundImage:`url(${a.thumbnail})`})},null,4),[[m,!a.ready&&a.thumbnail]])]),_:1}),o.showConsent?(n(),r("div",C,[d("div",z,[k(u(s.consentBlockMessage)+" ",1),d("button",{class:"widget-kvass-media-render-vimeo__blocked-warning-button",onClick:t[0]||(t[0]=(...f)=>o.openConsent&&o.openConsent(...f))},u(s.consentButtonLabel),1)])])):w("",!0)],4)}const E=v(B,[["render",V],["styles",[x]]]);customElements.define("kvass-vimeo",b(E));
|
package/dist/youtube.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as
|
|
2
|
-
`,x={props:{url:{type:String,default:""},loop:{type:[String,Boolean],default:!0},autoplay:{type:[String,Boolean],default:!1},controls:{type:[String,Boolean],default:!0},mute:{type:[String,Boolean],default:!1},displayThumbnail:{type:[String,Boolean],default:!0},ignoreConsent:{type:[String,Boolean],default:!1},hideConsent:{type:[String,Boolean],default:!1},thumbnailSource:{type:String,default:""},consentBlockMessage:{type:String,default:"The video is blocked due to lack of consent to cookies"},consentButtonLabel:{type:String,default:"Edit consents"},aspectRatio:{type:String,default:"16/9"}},data(){return{ready:!1,
|
|
1
|
+
import{_ as p,o as d,c as u,a as i,k as h,w as y,z as f,A as b,y as l,B as g,C as w,t as c,d as v,q as k}from"./_plugin-vue_export-helper.js";import{E as a,L as _,W as S}from"./index.js";const B=`.widget-kvass-media-render-youtube{height:100%;width:100%;position:relative}.widget-kvass-media-render-youtube iframe{height:100%;width:100%}.widget-kvass-media-render-youtube>*{position:absolute;top:0;left:0;width:100%;height:100%}.widget-kvass-media-render-youtube__thumbnail{background-size:cover;background-repeat:no-repeat;background-position:center;filter:blur(10px);opacity:.7}.widget-kvass-media-render-youtube__blocked{display:flex;justify-content:center;align-items:center;left:50%;top:50%;transform:translate(-50%,-50%)}.widget-kvass-media-render-youtube__blocked svg{opacity:.3}@media (max-width: 992px){.widget-kvass-media-render-youtube__blocked svg{font-size:2.5em}}.widget-kvass-media-render-youtube__blocked-warning{pointer-events:initial;position:absolute;bottom:0;text-align:center;background-color:#f2f2f2;font-size:.6em;bottom:3rem;left:3rem;max-width:400px;font-size:.8em;padding:1.5em 2em}.widget-kvass-media-render-youtube__blocked-warning-button{padding:.5rem;border:1px solid #818181;backdrop-filter:none;background-color:transparent}@media (max-width: 992px){.widget-kvass-media-render-youtube__blocked-warning{left:.5rem;bottom:.5rem;font-size:.6em;max-width:200px}}.widget-kvass-media-render-youtube .fade-enter-active,.widget-kvass-media-render-youtube .fade-leave-active{transition:opacity .5s}.widget-kvass-media-render-youtube .fade-enter,.widget-kvass-media-render-youtube .fade-leave-to{opacity:0}
|
|
2
|
+
`,x={props:{url:{type:String,default:""},videoState:{type:String,default:"ready",enums:["ready ","play","pause"]},loop:{type:[String,Boolean],default:!0},autoplay:{type:[String,Boolean],default:!1},controls:{type:[String,Boolean],default:!0},mute:{type:[String,Boolean],default:!1},displayThumbnail:{type:[String,Boolean],default:!0},ignoreConsent:{type:[String,Boolean],default:!1},hideConsent:{type:[String,Boolean],default:!1},thumbnailSource:{type:String,default:""},consentBlockMessage:{type:String,default:"The video is blocked due to lack of consent to cookies"},consentButtonLabel:{type:String,default:"Edit consents"},aspectRatio:{type:String,default:"16/9"}},watch:{videoState:{handler(e,t){if(e!==t)switch(e){case"play":return this.play();case"pause":return this.pause();default:return}}}},data(){return{ready:!1,thumbnail:null,consents:[]}},computed:{kvassDefined(){return typeof Kvass<"u"},showConsent(){return this.hideConsent||!this.kvassDefined?!1:!this.ignoreConsent&&!this.consents.includes("statistics")},videoId(){if(!this.url)return;let e=this.url,t=[a(e,/https\:\/\/(w{3}\.)?youtube\.com\/watch\?v=(.+)\/?/,{group:2}),a(e,/https\:\/\/(w{3}\.)?youtube\.com\/embed\/(.+)\/?/,{group:2}),a(e,/https\:\/\/(w{3}\.)?youtube\.com\/watch\/(.+)\/?/,{group:2}),a(e,/https\:\/\/(w{3}\.)?youtu\.be\/(.+)\/?/,{group:2})].find(s=>!!s);if(t)return t.split("&")[0]}},methods:{openConsent(){this.kvassDefined&&Kvass.emit("consent:show")},play(){this.player.mute(),this.player.playVideo()},pause(){this.player.pauseVideo()},async init(){const e={loop:this.loop,autoplay:this.autoplay,controls:this.controls,muted:this.mute||this.autoplay,enablejsapi:1,playsinline:1};function t(s){return s==="false"?!1:s==="true"?!0:s}Object.entries(e).map(([s,r])=>e[s]=Number(t(r))),_("https://www.youtube.com/iframe_api"),await S(()=>window.YT&&window.YT.Player,{limit:200}),this.player=new YT.Player(this.$refs.youtubePlayer,{videoId:this.videoId,playerVars:{...e,videoId:this.videoId,origin:window.location.host},events:{onReady:s=>{this.ready=!0,e.mute&&this.player.mute(),e.autoplay&&this.play()}}})}},async mounted(){if(this.displayThumbnail&&(this.thumbnail=!this.thumbnailSource&&this.kvassDefined?`/api/media/thumbnail?url=${this.url}`:this.thumbnailSource),this.ignoreConsent||!this.kvassDefined)return this.init();let e=t=>{if(this.consents=t||[],!(!this.consents||!this.consents.length)&&this.consents.includes("statistics"))return this.init()};this.kvassDefined&&(Kvass.emit("consent:get",t=>e(t)),Kvass.on("consent:change",e))}},C={ref:"youtubePlayer",class:"kvass-media-render-youtube__embed",frameborder:"0",allow:"autoplay; fullscreen;",webkitallowfullscreen:"",mozallowfullscreen:""},T={key:0,class:"widget-kvass-media-render-youtube__blocked"},z={class:"widget-kvass-media-render-youtube__blocked-warning"};function D(e,t,s,r,n,o){return d(),u("div",{class:"widget-kvass-media-render-youtube",style:l(`aspect-ratio: ${s.aspectRatio};`)},[i("div",C,null,512),h(g,{name:"fade",mode:"in-out"},{default:y(()=>[f(i("div",{class:"widget-kvass-media-render-youtube__thumbnail",style:l({backgroundImage:`url(${n.thumbnail})`})},null,4),[[b,!n.ready&&n.thumbnail]])]),_:1}),o.showConsent?(d(),u("div",T,[i("div",z,[w(c(s.consentBlockMessage)+" ",1),i("button",{class:"widget-kvass-media-render-youtube__blocked-warning-button",onClick:t[0]||(t[0]=(...m)=>o.openConsent&&o.openConsent(...m))},c(s.consentButtonLabel),1)])])):v("",!0)],4)}const E=p(x,[["render",D],["styles",[B]]]);customElements.define("kvass-youtube",k(E));
|
package/index.html
CHANGED
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
</head>
|
|
9
9
|
|
|
10
10
|
<body>
|
|
11
|
+
<kvass-youtube
|
|
12
|
+
url="https://www.youtube.com/watch?v=oPVte6aMprI"
|
|
13
|
+
loop="true"
|
|
14
|
+
></kvass-youtube>
|
|
15
|
+
|
|
16
|
+
<script type="module" src="/src/youtube/main.js"></script>
|
|
11
17
|
<!-- <kvass-contact
|
|
12
18
|
account-url="https://local.kvass.test"
|
|
13
19
|
label-subtitle="Ønsker du å motta vårt nyhetsbrev?"
|
package/package.json
CHANGED
|
@@ -7,7 +7,11 @@ export default {
|
|
|
7
7
|
type: String,
|
|
8
8
|
default: '',
|
|
9
9
|
},
|
|
10
|
-
|
|
10
|
+
videoState: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: 'ready',
|
|
13
|
+
enums: ['ready ', 'play', 'pause'],
|
|
14
|
+
},
|
|
11
15
|
loop: {
|
|
12
16
|
type: [String, Boolean],
|
|
13
17
|
default: true,
|
|
@@ -58,14 +62,30 @@ export default {
|
|
|
58
62
|
default: '16/9',
|
|
59
63
|
},
|
|
60
64
|
},
|
|
65
|
+
watch: {
|
|
66
|
+
videoState: {
|
|
67
|
+
handler(newValue, oldValue) {
|
|
68
|
+
if (newValue === oldValue) return
|
|
69
|
+
switch (newValue) {
|
|
70
|
+
case 'play':
|
|
71
|
+
return this.play()
|
|
72
|
+
case 'pause':
|
|
73
|
+
return this.pause()
|
|
74
|
+
default:
|
|
75
|
+
return
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
61
80
|
data() {
|
|
62
81
|
return {
|
|
63
82
|
ready: false,
|
|
64
|
-
|
|
83
|
+
|
|
65
84
|
thumbnail: null,
|
|
66
85
|
consents: [],
|
|
67
86
|
}
|
|
68
87
|
},
|
|
88
|
+
|
|
69
89
|
computed: {
|
|
70
90
|
kvassDefined() {
|
|
71
91
|
return typeof Kvass !== 'undefined'
|
|
@@ -78,7 +98,7 @@ export default {
|
|
|
78
98
|
videoId() {
|
|
79
99
|
if (!this.url) return
|
|
80
100
|
|
|
81
|
-
|
|
101
|
+
let id = [
|
|
82
102
|
ExtractString(this.url, /https\:\/\/(w{3}\.)?vimeo\.com\/(.+)\/?/, {
|
|
83
103
|
group: 2,
|
|
84
104
|
}),
|
|
@@ -89,9 +109,9 @@ export default {
|
|
|
89
109
|
group: 3,
|
|
90
110
|
},
|
|
91
111
|
),
|
|
92
|
-
]
|
|
93
|
-
|
|
94
|
-
|
|
112
|
+
].find((e) => Boolean(e))
|
|
113
|
+
|
|
114
|
+
if (id) return id.split('&')[0]
|
|
95
115
|
},
|
|
96
116
|
},
|
|
97
117
|
|
|
@@ -100,14 +120,22 @@ export default {
|
|
|
100
120
|
if (!this.kvassDefined) return
|
|
101
121
|
Kvass.emit('consent:show')
|
|
102
122
|
},
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
123
|
+
|
|
124
|
+
async play() {
|
|
125
|
+
try {
|
|
126
|
+
this.player.setVolume(0)
|
|
127
|
+
await this.player.play()
|
|
128
|
+
} catch (e) {
|
|
129
|
+
console.log(e)
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
pause() {
|
|
133
|
+
this.player.pause()
|
|
106
134
|
},
|
|
107
135
|
|
|
108
136
|
async init() {
|
|
109
137
|
const mergeOptions = {
|
|
110
|
-
|
|
138
|
+
url: `https://vimeo.com/${this.videoId}`,
|
|
111
139
|
loop: this.loop,
|
|
112
140
|
autoplay: this.autoplay,
|
|
113
141
|
controls: this.controls,
|
|
@@ -129,9 +157,7 @@ export default {
|
|
|
129
157
|
LoadScript('https://player.vimeo.com/api/player.js')
|
|
130
158
|
const Vimeo = await WaitUntil(() => window.Vimeo, { limit: 100 })
|
|
131
159
|
|
|
132
|
-
this.player = new Vimeo.Player(this.$refs.vimeoPlayer,
|
|
133
|
-
...mergeOptions,
|
|
134
|
-
})
|
|
160
|
+
this.player = new Vimeo.Player(this.$refs.vimeoPlayer, mergeOptions)
|
|
135
161
|
|
|
136
162
|
await this.player
|
|
137
163
|
.ready()
|
|
@@ -139,32 +165,13 @@ export default {
|
|
|
139
165
|
this.ready = true
|
|
140
166
|
})
|
|
141
167
|
.catch((error) => {
|
|
142
|
-
|
|
168
|
+
console.log(error)
|
|
143
169
|
})
|
|
144
170
|
},
|
|
145
171
|
},
|
|
146
172
|
|
|
147
173
|
async mounted() {
|
|
148
|
-
|
|
149
|
-
this.thumbnail =
|
|
150
|
-
!this.thumbnailSource && this.kvassDefined
|
|
151
|
-
? `/api/media/thumbnail?url=${this.url}`
|
|
152
|
-
: this.thumbnailSource
|
|
153
|
-
|
|
154
|
-
if (this.ignoreConsent || !this.kvassDefined) return this.init()
|
|
155
|
-
|
|
156
|
-
let onChange = (consents) => {
|
|
157
|
-
this.consents = consents || []
|
|
158
|
-
if (!this.consents || !this.consents.length) return
|
|
159
|
-
|
|
160
|
-
if (this.consents.includes('statistics')) return this.init()
|
|
161
|
-
return this.$nextTick(() => this.$emit('ended'))
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (this.kvassDefined) {
|
|
165
|
-
Kvass.emit('consent:get', (c) => onChange(c))
|
|
166
|
-
Kvass.on('consent:change', onChange)
|
|
167
|
-
}
|
|
174
|
+
this.init()
|
|
168
175
|
},
|
|
169
176
|
}
|
|
170
177
|
</script>
|
|
@@ -7,6 +7,11 @@ export default {
|
|
|
7
7
|
type: String,
|
|
8
8
|
default: '',
|
|
9
9
|
},
|
|
10
|
+
videoState: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: 'ready',
|
|
13
|
+
enums: ['ready ', 'play', 'pause'],
|
|
14
|
+
},
|
|
10
15
|
|
|
11
16
|
loop: {
|
|
12
17
|
type: [String, Boolean],
|
|
@@ -58,10 +63,25 @@ export default {
|
|
|
58
63
|
default: '16/9',
|
|
59
64
|
},
|
|
60
65
|
},
|
|
66
|
+
|
|
67
|
+
watch: {
|
|
68
|
+
videoState: {
|
|
69
|
+
handler(newValue, oldValue) {
|
|
70
|
+
if (newValue === oldValue) return
|
|
71
|
+
switch (newValue) {
|
|
72
|
+
case 'play':
|
|
73
|
+
return this.play()
|
|
74
|
+
case 'pause':
|
|
75
|
+
return this.pause()
|
|
76
|
+
default:
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
61
82
|
data() {
|
|
62
83
|
return {
|
|
63
84
|
ready: false,
|
|
64
|
-
player: null,
|
|
65
85
|
thumbnail: null,
|
|
66
86
|
consents: [],
|
|
67
87
|
}
|
|
@@ -78,7 +98,7 @@ export default {
|
|
|
78
98
|
videoId() {
|
|
79
99
|
if (!this.url) return
|
|
80
100
|
let value = this.url
|
|
81
|
-
|
|
101
|
+
let id = [
|
|
82
102
|
ExtractString(
|
|
83
103
|
value,
|
|
84
104
|
/https\:\/\/(w{3}\.)?youtube\.com\/watch\?v=(.+)\/?/,
|
|
@@ -97,11 +117,11 @@ export default {
|
|
|
97
117
|
ExtractString(value, /https\:\/\/(w{3}\.)?youtu\.be\/(.+)\/?/, {
|
|
98
118
|
group: 2,
|
|
99
119
|
}),
|
|
100
|
-
]
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
120
|
+
].find((e) => {
|
|
121
|
+
return Boolean(e)
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
if (id) return id.split('&')[0]
|
|
105
125
|
},
|
|
106
126
|
},
|
|
107
127
|
|
|
@@ -111,9 +131,12 @@ export default {
|
|
|
111
131
|
Kvass.emit('consent:show')
|
|
112
132
|
},
|
|
113
133
|
play() {
|
|
114
|
-
|
|
134
|
+
this.player.mute()
|
|
115
135
|
this.player.playVideo()
|
|
116
136
|
},
|
|
137
|
+
pause() {
|
|
138
|
+
this.player.pauseVideo()
|
|
139
|
+
},
|
|
117
140
|
|
|
118
141
|
async init() {
|
|
119
142
|
const mergeOptions = {
|
|
@@ -137,7 +160,7 @@ export default {
|
|
|
137
160
|
|
|
138
161
|
LoadScript('https://www.youtube.com/iframe_api')
|
|
139
162
|
|
|
140
|
-
await WaitUntil(() => window.YT && window.YT.Player, { limit:
|
|
163
|
+
await WaitUntil(() => window.YT && window.YT.Player, { limit: 200 })
|
|
141
164
|
this.player = new YT.Player(this.$refs.youtubePlayer, {
|
|
142
165
|
videoId: this.videoId,
|
|
143
166
|
playerVars: {
|
|
@@ -148,8 +171,9 @@ export default {
|
|
|
148
171
|
events: {
|
|
149
172
|
onReady: (event) => {
|
|
150
173
|
this.ready = true
|
|
151
|
-
|
|
152
|
-
if (Boolean(mergeOptions.
|
|
174
|
+
|
|
175
|
+
if (Boolean(mergeOptions.mute)) this.player.mute()
|
|
176
|
+
if (Boolean(mergeOptions.autoplay)) this.play()
|
|
153
177
|
},
|
|
154
178
|
},
|
|
155
179
|
})
|