| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  | {{define "clientsBulkModal"}} | 
					
						
							|  |  |  | <a-modal id="client-bulk-modal" v-model="clientsBulkModal.visible" :title="clientsBulkModal.title" @ok="clientsBulkModal.ok" | 
					
						
							|  |  |  |          :confirm-loading="clientsBulkModal.confirmLoading" :closable="true" :mask-closable="false" | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |          :class="themeSwitcher.darkCardClass" | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |          :ok-text="clientsBulkModal.okText" cancel-text='{{ i18n "close" }}'> | 
					
						
							|  |  |  |     <a-form layout="inline"> | 
					
						
							|  |  |  |         <a-form-item label='{{ i18n "pages.client.method" }}'> | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             <a-select v-model="clientsBulkModal.emailMethod" buttonStyle="solid" style="width: 350px" :dropdown-class-name="themeSwitcher.darkCardClass"> | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |                 <a-select-option :value="0">Random</a-select-option> | 
					
						
							| 
									
										
										
										
											2023-03-24 13:41:29 +00:00
										 |  |  |                 <a-select-option :value="1">Random+Prefix</a-select-option> | 
					
						
							|  |  |  |                 <a-select-option :value="2">Random+Prefix+Num</a-select-option> | 
					
						
							|  |  |  |                 <a-select-option :value="3">Random+Prefix+Num+Postfix</a-select-option> | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |                 <a-select-option :value="4">Prefix+Num+Postfix [ BE CAREFUL! ]</a-select-option> | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             </a-select> | 
					
						
							|  |  |  |         </a-form-item><br /> | 
					
						
							|  |  |  |         <a-form-item v-if="clientsBulkModal.emailMethod>1"> | 
					
						
							|  |  |  |             <span slot="label">{{ i18n "pages.client.first" }}</span> | 
					
						
							|  |  |  |             <a-input-number v-model="clientsBulkModal.firstNum" :min="1"></a-input-number> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							|  |  |  |         <a-form-item v-if="clientsBulkModal.emailMethod>1"> | 
					
						
							|  |  |  |             <span slot="label">{{ i18n "pages.client.last" }}</span> | 
					
						
							|  |  |  |             <a-input-number v-model="clientsBulkModal.lastNum" :min="clientsBulkModal.firstNum"></a-input-number> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							|  |  |  |         <a-form-item v-if="clientsBulkModal.emailMethod>0"> | 
					
						
							|  |  |  |             <span slot="label">{{ i18n "pages.client.prefix" }}</span> | 
					
						
							|  |  |  |             <a-input v-model="clientsBulkModal.emailPrefix" style="width: 120px"></a-input> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							|  |  |  |         <a-form-item v-if="clientsBulkModal.emailMethod>2"> | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |             <span slot="label">{{ i18n "pages.client.postfix" }}</span> | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             <a-input v-model="clientsBulkModal.emailPostfix" style="width: 120px"></a-input> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							|  |  |  |         <a-form-item v-if="clientsBulkModal.emailMethod < 2"> | 
					
						
							|  |  |  |             <span slot="label">{{ i18n "pages.client.clientCount" }}</span> | 
					
						
							|  |  |  |             <a-input-number v-model="clientsBulkModal.quantity" :min="1" :max="100"></a-input-number> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							| 
									
										
										
										
											2023-05-07 16:28:56 +00:00
										 |  |  |         <a-form-item> | 
					
						
							| 
									
										
										
										
											2023-05-07 13:42:47 +00:00
										 |  |  |                 <span slot="label"> | 
					
						
							|  |  |  |                     Subscription | 
					
						
							|  |  |  |                     <a-tooltip> | 
					
						
							|  |  |  |                         <template slot="title"> | 
					
						
							|  |  |  |                             <span>{{ i18n "pages.inbounds.subscriptionDesc" }}</span> | 
					
						
							|  |  |  |                         </template> | 
					
						
							|  |  |  |                         <a-icon type="question-circle" theme="filled"></a-icon> | 
					
						
							|  |  |  |                     </a-tooltip> | 
					
						
							|  |  |  |                 </span> | 
					
						
							|  |  |  |                 <a-input v-model.trim="clientsBulkModal.subId"></a-input> | 
					
						
							| 
									
										
										
										
											2023-05-07 11:06:43 +00:00
										 |  |  |         </a-form-item> | 
					
						
							| 
									
										
										
										
											2023-05-07 13:42:47 +00:00
										 |  |  |         <a-form-item> | 
					
						
							|  |  |  |             <span slot="label"> | 
					
						
							|  |  |  |                 Telegram ID | 
					
						
							|  |  |  |                 <a-tooltip> | 
					
						
							|  |  |  |                     <template slot="title"> | 
					
						
							|  |  |  |                         <span>{{ i18n "pages.inbounds.telegramDesc" }}</span> | 
					
						
							|  |  |  |                     </template> | 
					
						
							|  |  |  |                     <a-icon type="question-circle" theme="filled"></a-icon> | 
					
						
							|  |  |  |                 </a-tooltip> | 
					
						
							|  |  |  |             </span> | 
					
						
							| 
									
										
										
										
											2023-05-07 11:06:43 +00:00
										 |  |  |             <a-input v-model.trim="clientsBulkModal.tgId"></a-input> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |         <a-form-item> | 
					
						
							|  |  |  |             <span slot="label"> | 
					
						
							|  |  |  |                 <span>{{ i18n "pages.inbounds.IPLimit" }}</span> | 
					
						
							|  |  |  |                 <a-tooltip> | 
					
						
							|  |  |  |                     <template slot="title"> | 
					
						
							|  |  |  |                     <span>{{ i18n "pages.inbounds.IPLimitDesc" }}</span> | 
					
						
							|  |  |  |                     </template> | 
					
						
							|  |  |  |                     <a-icon type="question-circle" theme="filled"></a-icon> | 
					
						
							|  |  |  |                 </a-tooltip> | 
					
						
							|  |  |  |             </span> | 
					
						
							| 
									
										
										
										
											2023-05-04 16:57:42 +00:00
										 |  |  |             <a-input-number v-model="clientsBulkModal.limitIp" min="0"></a-input-number> | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |         </a-form-item> | 
					
						
							| 
									
										
										
										
											2023-05-07 11:06:43 +00:00
										 |  |  |         <br> | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |         <a-form-item v-if="clientsBulkModal.inbound.xtls" label="Flow"> | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             <a-select v-model="clientsBulkModal.flow" style="width: 200px" :dropdown-class-name="themeSwitcher.darkCardClass"> | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |                 <a-select-option value="">{{ i18n "none" }}</a-select-option> | 
					
						
							|  |  |  |                 <a-select-option v-for="key in XTLS_FLOW_CONTROL" :value="key">[[ key ]]</a-select-option> | 
					
						
							|  |  |  |             </a-select> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							|  |  |  |         <a-form-item v-if="clientsBulkModal.inbound.canEnableTlsFlow()" label="Flow" layout="inline"> | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             <a-select v-model="clientsBulkModal.flow" style="width: 200px" :dropdown-class-name="themeSwitcher.darkCardClass"> | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |                 <a-select-option value="" selected>{{ i18n "none" }}</a-select-option> | 
					
						
							|  |  |  |                 <a-select-option v-for="key in TLS_FLOW_CONTROL" :value="key">[[ key ]]</a-select-option> | 
					
						
							|  |  |  |             </a-select> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |         <a-form-item> | 
					
						
							|  |  |  |             <span slot="label"> | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |                 <span>{{ i18n "pages.inbounds.totalFlow" }}</span> (GB) | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |                 <a-tooltip> | 
					
						
							|  |  |  |                     <template slot="title"> | 
					
						
							|  |  |  |                         0 <span>{{ i18n "pages.inbounds.meansNoLimit" }}</span> | 
					
						
							|  |  |  |                     </template> | 
					
						
							|  |  |  |                     <a-icon type="question-circle" theme="filled"></a-icon> | 
					
						
							|  |  |  |                 </a-tooltip> | 
					
						
							|  |  |  |             </span> | 
					
						
							|  |  |  |         <a-input-number v-model="clientsBulkModal.totalGB" :min="0"></a-input-number> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							| 
									
										
										
										
											2023-05-07 11:06:43 +00:00
										 |  |  |         <br> | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |         <a-form-item label='{{ i18n "pages.client.delayedStart" }}'> | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |             <a-switch v-model="clientsBulkModal.delayedStart" @click="clientsBulkModal.expiryTime=0"></a-switch> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							| 
									
										
										
										
											2023-05-07 11:06:43 +00:00
										 |  |  |         <br> | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |         <a-form-item label='{{ i18n "pages.client.expireDays" }}' v-if="clientsBulkModal.delayedStart"> | 
					
						
							| 
									
										
										
										
											2023-05-04 16:57:42 +00:00
										 |  |  |             <a-input-number v-model="delayedExpireDays" :min="0"></a-input-number> | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |         </a-form-item> | 
					
						
							|  |  |  |         <a-form-item v-else> | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             <span slot="label"> | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |                 <span>{{ i18n "pages.inbounds.expireDate" }}</span> | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |                 <a-tooltip> | 
					
						
							|  |  |  |                     <template slot="title"> | 
					
						
							|  |  |  |                         <span>{{ i18n "pages.inbounds.leaveBlankToNeverExpire" }}</span> | 
					
						
							|  |  |  |                     </template> | 
					
						
							|  |  |  |                     <a-icon type="question-circle" theme="filled"></a-icon> | 
					
						
							|  |  |  |                 </a-tooltip> | 
					
						
							|  |  |  |             </span> | 
					
						
							| 
									
										
										
										
											2023-04-29 19:08:41 +00:00
										 |  |  |             <a-date-picker :show-time="{ format: 'HH:mm:ss' }" format="YYYY-MM-DD HH:mm:ss" | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |                            :dropdown-class-name="themeSwitcher.darkCardClass" | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |                            v-model="clientsBulkModal.expiryTime" style="width: 300px;"></a-date-picker> | 
					
						
							|  |  |  |         </a-form-item> | 
					
						
							|  |  |  |     </a-form> | 
					
						
							|  |  |  | </a-modal> | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const clientsBulkModal = { | 
					
						
							|  |  |  |         visible: false, | 
					
						
							|  |  |  |         confirmLoading: false, | 
					
						
							|  |  |  |         title: '', | 
					
						
							|  |  |  |         okText: '', | 
					
						
							|  |  |  |         confirm: null, | 
					
						
							|  |  |  |         dbInbound: new DBInbound(), | 
					
						
							|  |  |  |         inbound: new Inbound(), | 
					
						
							|  |  |  |         quantity: 1, | 
					
						
							|  |  |  |         totalGB: 0, | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |         limitIp: 0, | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |         expiryTime: '', | 
					
						
							|  |  |  |         emailMethod: 0, | 
					
						
							|  |  |  |         firstNum: 1, | 
					
						
							|  |  |  |         lastNum: 1, | 
					
						
							|  |  |  |         emailPrefix: "", | 
					
						
							|  |  |  |         emailPostfix: "", | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |         subId: "", | 
					
						
							|  |  |  |         tgId: "", | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |         flow: "", | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |         delayedStart: false, | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |         ok() { | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |             clients = []; | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             method = clientsBulkModal.emailMethod; | 
					
						
							|  |  |  |             if (method > 1) { | 
					
						
							|  |  |  |                 start = clientsBulkModal.firstNum; | 
					
						
							|  |  |  |                 end = clientsBulkModal.lastNum + 1; | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |                 start = 0; | 
					
						
							|  |  |  |                 end = clientsBulkModal.quantity; | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             prefix = (method > 0 && clientsBulkModal.emailPrefix.length > 0) ? clientsBulkModal.emailPrefix : ""; | 
					
						
							|  |  |  |             useNum = (method > 1); | 
					
						
							|  |  |  |             postfix = (method > 2 && clientsBulkModal.emailPostfix.length > 0) ? clientsBulkModal.emailPostfix : ""; | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             for (let i = start; i < end; i++) { | 
					
						
							|  |  |  |                 newClient = clientsBulkModal.newClient(clientsBulkModal.dbInbound.protocol); | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |                 if (method == 4) newClient.email = ""; | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |                 newClient.email += useNum ? prefix + i.toString() + postfix : prefix + postfix; | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |                 newClient.subId = clientsBulkModal.subId; | 
					
						
							|  |  |  |                 newClient.tgId = clientsBulkModal.tgId; | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |                 newClient.limitIp = clientsBulkModal.limitIp; | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |                 newClient._totalGB = clientsBulkModal.totalGB; | 
					
						
							|  |  |  |                 newClient._expiryTime = clientsBulkModal.expiryTime; | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |                 if (clientsBulkModal.inbound.canEnableTlsFlow()) { | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |                     newClient.flow = clientsBulkModal.flow; | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |                 if (clientsBulkModal.inbound.xtls) { | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |                     newClient.flow = clientsBulkModal.flow; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 clients.push(newClient); | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-04-18 18:04:06 +00:00
										 |  |  |             ObjectUtil.execute(clientsBulkModal.confirm, clients, clientsBulkModal.dbInbound.id); | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |         show({ | 
					
						
							|  |  |  |             title = '', | 
					
						
							|  |  |  |             okText = '{{ i18n "sure" }}', | 
					
						
							|  |  |  |             dbInbound = null, | 
					
						
							|  |  |  |             confirm = (inbound, dbInbound) => { } | 
					
						
							|  |  |  |         }) { | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             this.visible = true; | 
					
						
							|  |  |  |             this.title = title; | 
					
						
							|  |  |  |             this.okText = okText; | 
					
						
							|  |  |  |             this.confirm = confirm; | 
					
						
							|  |  |  |             this.quantity = 1; | 
					
						
							|  |  |  |             this.totalGB = 0; | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |             this.expiryTime = 0; | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             this.emailMethod = 0; | 
					
						
							|  |  |  |             this.limitIp = 0; | 
					
						
							|  |  |  |             this.firstNum = 1; | 
					
						
							|  |  |  |             this.lastNum = 1; | 
					
						
							|  |  |  |             this.emailPrefix = ""; | 
					
						
							|  |  |  |             this.emailPostfix = ""; | 
					
						
							|  |  |  |             this.subId = ""; | 
					
						
							|  |  |  |             this.tgId = ""; | 
					
						
							|  |  |  |             this.flow = ""; | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |             this.dbInbound = new DBInbound(dbInbound); | 
					
						
							|  |  |  |             this.inbound = dbInbound.toInbound(); | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |             this.delayedStart = false; | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |         }, | 
					
						
							|  |  |  |         getClients(protocol, clientSettings) { | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             switch (protocol) { | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |                 case Protocols.VMESS: return clientSettings.vmesses; | 
					
						
							|  |  |  |                 case Protocols.VLESS: return clientSettings.vlesses; | 
					
						
							|  |  |  |                 case Protocols.TROJAN: return clientSettings.trojans; | 
					
						
							|  |  |  |                 default: return null; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         newClient(protocol) { | 
					
						
							|  |  |  |             switch (protocol) { | 
					
						
							|  |  |  |                 case Protocols.VMESS: return new Inbound.VmessSettings.Vmess(); | 
					
						
							|  |  |  |                 case Protocols.VLESS: return new Inbound.VLESSSettings.VLESS(); | 
					
						
							|  |  |  |                 case Protocols.TROJAN: return new Inbound.TrojanSettings.Trojan(); | 
					
						
							|  |  |  |                 default: return null; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         close() { | 
					
						
							|  |  |  |             clientsBulkModal.visible = false; | 
					
						
							|  |  |  |             clientsBulkModal.loading(false); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         loading(loading) { | 
					
						
							|  |  |  |             clientsBulkModal.confirmLoading = loading; | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const clientsBulkModalApp = new Vue({ | 
					
						
							|  |  |  |         delimiters: ['[[', ']]'], | 
					
						
							|  |  |  |         el: '#client-bulk-modal', | 
					
						
							|  |  |  |         data: { | 
					
						
							|  |  |  |             clientsBulkModal, | 
					
						
							|  |  |  |             get inbound() { | 
					
						
							|  |  |  |                 return this.clientsBulkModal.inbound; | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |             get delayedExpireDays() { | 
					
						
							|  |  |  |                 return this.clientsBulkModal.expiryTime < 0 ? this.clientsBulkModal.expiryTime / -86400000 : 0; | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  |             set delayedExpireDays(days) { | 
					
						
							| 
									
										
										
										
											2023-04-09 19:43:18 +00:00
										 |  |  |                 this.clientsBulkModal.expiryTime = -86400000 * days; | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  |         }, | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2023-05-08 14:44:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-17 16:07:49 +00:00
										 |  |  | </script> | 
					
						
							|  |  |  | {{end}} |