001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.control.user.inventory.server; 018 019import com.echothree.control.user.inventory.common.InventoryRemote; 020import com.echothree.control.user.inventory.common.form.*; 021import com.echothree.control.user.inventory.server.command.*; 022import com.echothree.model.data.user.common.pk.UserVisitPK; 023import com.echothree.util.common.command.CommandResult; 024import javax.ejb.Stateless; 025 026@Stateless 027public class InventoryBean 028 extends InventoryFormsImpl 029 implements InventoryRemote, InventoryLocal { 030 031 // ------------------------------------------------------------------------- 032 // Testing 033 // ------------------------------------------------------------------------- 034 035 @Override 036 public String ping() { 037 return "InventoryBean is alive!"; 038 } 039 040 // ------------------------------------------------------------------------- 041 // Inventory Conditions 042 // ------------------------------------------------------------------------- 043 044 @Override 045 public CommandResult createInventoryCondition(UserVisitPK userVisitPK, CreateInventoryConditionForm form) { 046 return new CreateInventoryConditionCommand(userVisitPK, form).run(); 047 } 048 049 @Override 050 public CommandResult getInventoryConditions(UserVisitPK userVisitPK, GetInventoryConditionsForm form) { 051 return new GetInventoryConditionsCommand(userVisitPK, form).run(); 052 } 053 054 @Override 055 public CommandResult getInventoryCondition(UserVisitPK userVisitPK, GetInventoryConditionForm form) { 056 return new GetInventoryConditionCommand(userVisitPK, form).run(); 057 } 058 059 @Override 060 public CommandResult getInventoryConditionChoices(UserVisitPK userVisitPK, GetInventoryConditionChoicesForm form) { 061 return new GetInventoryConditionChoicesCommand(userVisitPK, form).run(); 062 } 063 064 @Override 065 public CommandResult setDefaultInventoryCondition(UserVisitPK userVisitPK, SetDefaultInventoryConditionForm form) { 066 return new SetDefaultInventoryConditionCommand(userVisitPK, form).run(); 067 } 068 069 @Override 070 public CommandResult editInventoryCondition(UserVisitPK userVisitPK, EditInventoryConditionForm form) { 071 return new EditInventoryConditionCommand(userVisitPK, form).run(); 072 } 073 074 @Override 075 public CommandResult deleteInventoryCondition(UserVisitPK userVisitPK, DeleteInventoryConditionForm form) { 076 return new DeleteInventoryConditionCommand(userVisitPK, form).run(); 077 } 078 079 // ------------------------------------------------------------------------- 080 // Inventory Condition Descriptions 081 // ------------------------------------------------------------------------- 082 083 @Override 084 public CommandResult createInventoryConditionDescription(UserVisitPK userVisitPK, CreateInventoryConditionDescriptionForm form) { 085 return new CreateInventoryConditionDescriptionCommand(userVisitPK, form).run(); 086 } 087 088 @Override 089 public CommandResult getInventoryConditionDescriptions(UserVisitPK userVisitPK, GetInventoryConditionDescriptionsForm form) { 090 return new GetInventoryConditionDescriptionsCommand(userVisitPK, form).run(); 091 } 092 093 @Override 094 public CommandResult editInventoryConditionDescription(UserVisitPK userVisitPK, EditInventoryConditionDescriptionForm form) { 095 return new EditInventoryConditionDescriptionCommand(userVisitPK, form).run(); 096 } 097 098 @Override 099 public CommandResult deleteInventoryConditionDescription(UserVisitPK userVisitPK, DeleteInventoryConditionDescriptionForm form) { 100 return new DeleteInventoryConditionDescriptionCommand(userVisitPK, form).run(); 101 } 102 103 // -------------------------------------------------------------------------------- 104 // Inventory Condition Use Types 105 // -------------------------------------------------------------------------------- 106 107 @Override 108 public CommandResult createInventoryConditionUseType(UserVisitPK userVisitPK, CreateInventoryConditionUseTypeForm form) { 109 return new CreateInventoryConditionUseTypeCommand(userVisitPK, form).run(); 110 } 111 112 @Override 113 public CommandResult getInventoryConditionUseTypeChoices(UserVisitPK userVisitPK, GetInventoryConditionUseTypeChoicesForm form) { 114 return new GetInventoryConditionUseTypeChoicesCommand(userVisitPK, form).run(); 115 } 116 117 @Override 118 public CommandResult getInventoryConditionUseTypes(UserVisitPK userVisitPK, GetInventoryConditionUseTypesForm form) { 119 return new GetInventoryConditionUseTypesCommand(userVisitPK, form).run(); 120 } 121 122 // -------------------------------------------------------------------------------- 123 // Inventory Condition Use Type Descriptions 124 // -------------------------------------------------------------------------------- 125 126 @Override 127 public CommandResult createInventoryConditionUseTypeDescription(UserVisitPK userVisitPK, CreateInventoryConditionUseTypeDescriptionForm form) { 128 return new CreateInventoryConditionUseTypeDescriptionCommand(userVisitPK, form).run(); 129 } 130 131 // -------------------------------------------------------------------------------- 132 // Inventory Condition Uses 133 // -------------------------------------------------------------------------------- 134 135 @Override 136 public CommandResult createInventoryConditionUse(UserVisitPK userVisitPK, CreateInventoryConditionUseForm form) { 137 return new CreateInventoryConditionUseCommand(userVisitPK, form).run(); 138 } 139 140 @Override 141 public CommandResult getInventoryConditionUses(UserVisitPK userVisitPK, GetInventoryConditionUsesForm form) { 142 return new GetInventoryConditionUsesCommand(userVisitPK, form).run(); 143 } 144 145 @Override 146 public CommandResult setDefaultInventoryConditionUse(UserVisitPK userVisitPK, SetDefaultInventoryConditionUseForm form) { 147 return new SetDefaultInventoryConditionUseCommand(userVisitPK, form).run(); 148 } 149 150 @Override 151 public CommandResult deleteInventoryConditionUse(UserVisitPK userVisitPK, DeleteInventoryConditionUseForm form) { 152 return new DeleteInventoryConditionUseCommand(userVisitPK, form).run(); 153 } 154 155 // ------------------------------------------------------------------------- 156 // Inventory Location Groups 157 // ------------------------------------------------------------------------- 158 159 @Override 160 public CommandResult createInventoryLocationGroup(UserVisitPK userVisitPK, CreateInventoryLocationGroupForm form) { 161 return new CreateInventoryLocationGroupCommand(userVisitPK, form).run(); 162 } 163 164 @Override 165 public CommandResult getInventoryLocationGroups(UserVisitPK userVisitPK, GetInventoryLocationGroupsForm form) { 166 return new GetInventoryLocationGroupsCommand(userVisitPK, form).run(); 167 } 168 169 @Override 170 public CommandResult getInventoryLocationGroup(UserVisitPK userVisitPK, GetInventoryLocationGroupForm form) { 171 return new GetInventoryLocationGroupCommand(userVisitPK, form).run(); 172 } 173 174 @Override 175 public CommandResult getInventoryLocationGroupChoices(UserVisitPK userVisitPK, GetInventoryLocationGroupChoicesForm form) { 176 return new GetInventoryLocationGroupChoicesCommand(userVisitPK, form).run(); 177 } 178 179 @Override 180 public CommandResult setDefaultInventoryLocationGroup(UserVisitPK userVisitPK, SetDefaultInventoryLocationGroupForm form) { 181 return new SetDefaultInventoryLocationGroupCommand(userVisitPK, form).run(); 182 } 183 184 @Override 185 public CommandResult getInventoryLocationGroupStatusChoices(UserVisitPK userVisitPK, GetInventoryLocationGroupStatusChoicesForm form) { 186 return new GetInventoryLocationGroupStatusChoicesCommand(userVisitPK, form).run(); 187 } 188 189 @Override 190 public CommandResult setInventoryLocationGroupStatus(UserVisitPK userVisitPK, SetInventoryLocationGroupStatusForm form) { 191 return new SetInventoryLocationGroupStatusCommand(userVisitPK, form).run(); 192 } 193 194 @Override 195 public CommandResult editInventoryLocationGroup(UserVisitPK userVisitPK, EditInventoryLocationGroupForm form) { 196 return new EditInventoryLocationGroupCommand(userVisitPK, form).run(); 197 } 198 199 @Override 200 public CommandResult deleteInventoryLocationGroup(UserVisitPK userVisitPK, DeleteInventoryLocationGroupForm form) { 201 return new DeleteInventoryLocationGroupCommand(userVisitPK, form).run(); 202 } 203 204 // ------------------------------------------------------------------------- 205 // Inventory Location Group Descriptions 206 // ------------------------------------------------------------------------- 207 208 @Override 209 public CommandResult createInventoryLocationGroupDescription(UserVisitPK userVisitPK, CreateInventoryLocationGroupDescriptionForm form) { 210 return new CreateInventoryLocationGroupDescriptionCommand(userVisitPK, form).run(); 211 } 212 213 @Override 214 public CommandResult getInventoryLocationGroupDescriptions(UserVisitPK userVisitPK, GetInventoryLocationGroupDescriptionsForm form) { 215 return new GetInventoryLocationGroupDescriptionsCommand(userVisitPK, form).run(); 216 } 217 218 @Override 219 public CommandResult editInventoryLocationGroupDescription(UserVisitPK userVisitPK, EditInventoryLocationGroupDescriptionForm form) { 220 return new EditInventoryLocationGroupDescriptionCommand(userVisitPK, form).run(); 221 } 222 223 @Override 224 public CommandResult deleteInventoryLocationGroupDescription(UserVisitPK userVisitPK, DeleteInventoryLocationGroupDescriptionForm form) { 225 return new DeleteInventoryLocationGroupDescriptionCommand(userVisitPK, form).run(); 226 } 227 228 // -------------------------------------------------------------------------------- 229 // Inventory Location Group Capacities 230 // -------------------------------------------------------------------------------- 231 232 @Override 233 public CommandResult createInventoryLocationGroupCapacity(UserVisitPK userVisitPK, CreateInventoryLocationGroupCapacityForm form) { 234 return new CreateInventoryLocationGroupCapacityCommand(userVisitPK, form).run(); 235 } 236 237 @Override 238 public CommandResult getInventoryLocationGroupCapacities(UserVisitPK userVisitPK, GetInventoryLocationGroupCapacitiesForm form) { 239 return new GetInventoryLocationGroupCapacitiesCommand(userVisitPK, form).run(); 240 } 241 242 @Override 243 public CommandResult editInventoryLocationGroupCapacity(UserVisitPK userVisitPK, EditInventoryLocationGroupCapacityForm form) { 244 return new EditInventoryLocationGroupCapacityCommand(userVisitPK, form).run(); 245 } 246 247 @Override 248 public CommandResult deleteInventoryLocationGroupCapacity(UserVisitPK userVisitPK, DeleteInventoryLocationGroupCapacityForm form) { 249 return new DeleteInventoryLocationGroupCapacityCommand(userVisitPK, form).run(); 250 } 251 252 // -------------------------------------------------------------------------------- 253 // Inventory Location Group Volumes 254 // -------------------------------------------------------------------------------- 255 256 @Override 257 public CommandResult createInventoryLocationGroupVolume(UserVisitPK userVisitPK, CreateInventoryLocationGroupVolumeForm form) { 258 return new CreateInventoryLocationGroupVolumeCommand(userVisitPK, form).run(); 259 } 260 261 @Override 262 public CommandResult editInventoryLocationGroupVolume(UserVisitPK userVisitPK, EditInventoryLocationGroupVolumeForm form) { 263 return new EditInventoryLocationGroupVolumeCommand(userVisitPK, form).run(); 264 } 265 266 @Override 267 public CommandResult deleteInventoryLocationGroupVolume(UserVisitPK userVisitPK, DeleteInventoryLocationGroupVolumeForm form) { 268 return new DeleteInventoryLocationGroupVolumeCommand(userVisitPK, form).run(); 269 } 270 271 // ------------------------------------------------------------------------- 272 // Lots 273 // ------------------------------------------------------------------------- 274 275 @Override 276 public CommandResult getLots(UserVisitPK userVisitPK, GetLotsForm form) { 277 return new GetLotsCommand(userVisitPK, form).run(); 278 } 279 280 @Override 281 public CommandResult getLot(UserVisitPK userVisitPK, GetLotForm form) { 282 return new GetLotCommand(userVisitPK, form).run(); 283 } 284 285 // -------------------------------------------------------------------------------- 286 // Lot Time Types 287 // -------------------------------------------------------------------------------- 288 289 @Override 290 public CommandResult createLotTimeType(UserVisitPK userVisitPK, CreateLotTimeTypeForm form) { 291 return new CreateLotTimeTypeCommand(userVisitPK, form).run(); 292 } 293 294 @Override 295 public CommandResult getLotTimeTypeChoices(UserVisitPK userVisitPK, GetLotTimeTypeChoicesForm form) { 296 return new GetLotTimeTypeChoicesCommand(userVisitPK, form).run(); 297 } 298 299 @Override 300 public CommandResult getLotTimeType(UserVisitPK userVisitPK, GetLotTimeTypeForm form) { 301 return new GetLotTimeTypeCommand(userVisitPK, form).run(); 302 } 303 304 @Override 305 public CommandResult getLotTimeTypes(UserVisitPK userVisitPK, GetLotTimeTypesForm form) { 306 return new GetLotTimeTypesCommand(userVisitPK, form).run(); 307 } 308 309 @Override 310 public CommandResult setDefaultLotTimeType(UserVisitPK userVisitPK, SetDefaultLotTimeTypeForm form) { 311 return new SetDefaultLotTimeTypeCommand(userVisitPK, form).run(); 312 } 313 314 @Override 315 public CommandResult editLotTimeType(UserVisitPK userVisitPK, EditLotTimeTypeForm form) { 316 return new EditLotTimeTypeCommand(userVisitPK, form).run(); 317 } 318 319 @Override 320 public CommandResult deleteLotTimeType(UserVisitPK userVisitPK, DeleteLotTimeTypeForm form) { 321 return new DeleteLotTimeTypeCommand(userVisitPK, form).run(); 322 } 323 324 // -------------------------------------------------------------------------------- 325 // Lot Time Type Descriptions 326 // -------------------------------------------------------------------------------- 327 328 @Override 329 public CommandResult createLotTimeTypeDescription(UserVisitPK userVisitPK, CreateLotTimeTypeDescriptionForm form) { 330 return new CreateLotTimeTypeDescriptionCommand(userVisitPK, form).run(); 331 } 332 333 @Override 334 public CommandResult getLotTimeTypeDescription(UserVisitPK userVisitPK, GetLotTimeTypeDescriptionForm form) { 335 return new GetLotTimeTypeDescriptionCommand(userVisitPK, form).run(); 336 } 337 338 @Override 339 public CommandResult getLotTimeTypeDescriptions(UserVisitPK userVisitPK, GetLotTimeTypeDescriptionsForm form) { 340 return new GetLotTimeTypeDescriptionsCommand(userVisitPK, form).run(); 341 } 342 343 @Override 344 public CommandResult editLotTimeTypeDescription(UserVisitPK userVisitPK, EditLotTimeTypeDescriptionForm form) { 345 return new EditLotTimeTypeDescriptionCommand(userVisitPK, form).run(); 346 } 347 348 @Override 349 public CommandResult deleteLotTimeTypeDescription(UserVisitPK userVisitPK, DeleteLotTimeTypeDescriptionForm form) { 350 return new DeleteLotTimeTypeDescriptionCommand(userVisitPK, form).run(); 351 } 352 353 // -------------------------------------------------------------------------------- 354 // Lot Alias Types 355 // -------------------------------------------------------------------------------- 356 357 @Override 358 public CommandResult createLotAliasType(UserVisitPK userVisitPK, CreateLotAliasTypeForm form) { 359 return new CreateLotAliasTypeCommand(userVisitPK, form).run(); 360 } 361 362 @Override 363 public CommandResult getLotAliasTypeChoices(UserVisitPK userVisitPK, GetLotAliasTypeChoicesForm form) { 364 return new GetLotAliasTypeChoicesCommand(userVisitPK, form).run(); 365 } 366 367 @Override 368 public CommandResult getLotAliasType(UserVisitPK userVisitPK, GetLotAliasTypeForm form) { 369 return new GetLotAliasTypeCommand(userVisitPK, form).run(); 370 } 371 372 @Override 373 public CommandResult getLotAliasTypes(UserVisitPK userVisitPK, GetLotAliasTypesForm form) { 374 return new GetLotAliasTypesCommand(userVisitPK, form).run(); 375 } 376 377 @Override 378 public CommandResult setDefaultLotAliasType(UserVisitPK userVisitPK, SetDefaultLotAliasTypeForm form) { 379 return new SetDefaultLotAliasTypeCommand(userVisitPK, form).run(); 380 } 381 382 @Override 383 public CommandResult editLotAliasType(UserVisitPK userVisitPK, EditLotAliasTypeForm form) { 384 return new EditLotAliasTypeCommand(userVisitPK, form).run(); 385 } 386 387 @Override 388 public CommandResult deleteLotAliasType(UserVisitPK userVisitPK, DeleteLotAliasTypeForm form) { 389 return new DeleteLotAliasTypeCommand(userVisitPK, form).run(); 390 } 391 392 // -------------------------------------------------------------------------------- 393 // Lot Alias Type Descriptions 394 // -------------------------------------------------------------------------------- 395 396 @Override 397 public CommandResult createLotAliasTypeDescription(UserVisitPK userVisitPK, CreateLotAliasTypeDescriptionForm form) { 398 return new CreateLotAliasTypeDescriptionCommand(userVisitPK, form).run(); 399 } 400 401 @Override 402 public CommandResult getLotAliasTypeDescription(UserVisitPK userVisitPK, GetLotAliasTypeDescriptionForm form) { 403 return new GetLotAliasTypeDescriptionCommand(userVisitPK, form).run(); 404 } 405 406 @Override 407 public CommandResult getLotAliasTypeDescriptions(UserVisitPK userVisitPK, GetLotAliasTypeDescriptionsForm form) { 408 return new GetLotAliasTypeDescriptionsCommand(userVisitPK, form).run(); 409 } 410 411 @Override 412 public CommandResult editLotAliasTypeDescription(UserVisitPK userVisitPK, EditLotAliasTypeDescriptionForm form) { 413 return new EditLotAliasTypeDescriptionCommand(userVisitPK, form).run(); 414 } 415 416 @Override 417 public CommandResult deleteLotAliasTypeDescription(UserVisitPK userVisitPK, DeleteLotAliasTypeDescriptionForm form) { 418 return new DeleteLotAliasTypeDescriptionCommand(userVisitPK, form).run(); 419 } 420 421 // -------------------------------------------------------------------------------- 422 // Lot Aliases 423 // -------------------------------------------------------------------------------- 424 425 @Override 426 public CommandResult createLotAlias(UserVisitPK userVisitPK, CreateLotAliasForm form) { 427 return new CreateLotAliasCommand(userVisitPK, form).run(); 428 } 429 430 @Override 431 public CommandResult getLotAlias(UserVisitPK userVisitPK, GetLotAliasForm form) { 432 return new GetLotAliasCommand(userVisitPK, form).run(); 433 } 434 435 @Override 436 public CommandResult getLotAliases(UserVisitPK userVisitPK, GetLotAliasesForm form) { 437 return new GetLotAliasesCommand(userVisitPK, form).run(); 438 } 439 440 @Override 441 public CommandResult editLotAlias(UserVisitPK userVisitPK, EditLotAliasForm form) { 442 return new EditLotAliasCommand(userVisitPK, form).run(); 443 } 444 445 @Override 446 public CommandResult deleteLotAlias(UserVisitPK userVisitPK, DeleteLotAliasForm form) { 447 return new DeleteLotAliasCommand(userVisitPK, form).run(); 448 } 449 450 // -------------------------------------------------------------------------------- 451 // Party Inventory Levels 452 // -------------------------------------------------------------------------------- 453 454 @Override 455 public CommandResult createPartyInventoryLevel(UserVisitPK userVisitPK, CreatePartyInventoryLevelForm form) { 456 return new CreatePartyInventoryLevelCommand(userVisitPK, form).run(); 457 } 458 459 @Override 460 public CommandResult getPartyInventoryLevel(UserVisitPK userVisitPK, GetPartyInventoryLevelForm form) { 461 return new GetPartyInventoryLevelCommand(userVisitPK, form).run(); 462 } 463 464 @Override 465 public CommandResult getPartyInventoryLevels(UserVisitPK userVisitPK, GetPartyInventoryLevelsForm form) { 466 return new GetPartyInventoryLevelsCommand(userVisitPK, form).run(); 467 } 468 469 @Override 470 public CommandResult editPartyInventoryLevel(UserVisitPK userVisitPK, EditPartyInventoryLevelForm form) { 471 return new EditPartyInventoryLevelCommand(userVisitPK, form).run(); 472 } 473 474 @Override 475 public CommandResult deletePartyInventoryLevel(UserVisitPK userVisitPK, DeletePartyInventoryLevelForm form) { 476 return new DeletePartyInventoryLevelCommand(userVisitPK, form).run(); 477 } 478 479 // -------------------------------------------------------------------------------- 480 // Allocation Priorities 481 // -------------------------------------------------------------------------------- 482 483 @Override 484 public CommandResult createAllocationPriority(UserVisitPK userVisitPK, CreateAllocationPriorityForm form) { 485 return new CreateAllocationPriorityCommand(userVisitPK, form).run(); 486 } 487 488 @Override 489 public CommandResult getAllocationPriorityChoices(UserVisitPK userVisitPK, GetAllocationPriorityChoicesForm form) { 490 return new GetAllocationPriorityChoicesCommand(userVisitPK, form).run(); 491 } 492 493 @Override 494 public CommandResult getAllocationPriority(UserVisitPK userVisitPK, GetAllocationPriorityForm form) { 495 return new GetAllocationPriorityCommand(userVisitPK, form).run(); 496 } 497 498 @Override 499 public CommandResult getAllocationPriorities(UserVisitPK userVisitPK, GetAllocationPrioritiesForm form) { 500 return new GetAllocationPrioritiesCommand(userVisitPK, form).run(); 501 } 502 503 @Override 504 public CommandResult setDefaultAllocationPriority(UserVisitPK userVisitPK, SetDefaultAllocationPriorityForm form) { 505 return new SetDefaultAllocationPriorityCommand(userVisitPK, form).run(); 506 } 507 508 @Override 509 public CommandResult editAllocationPriority(UserVisitPK userVisitPK, EditAllocationPriorityForm form) { 510 return new EditAllocationPriorityCommand(userVisitPK, form).run(); 511 } 512 513 @Override 514 public CommandResult deleteAllocationPriority(UserVisitPK userVisitPK, DeleteAllocationPriorityForm form) { 515 return new DeleteAllocationPriorityCommand(userVisitPK, form).run(); 516 } 517 518 // -------------------------------------------------------------------------------- 519 // Allocation Priority Descriptions 520 // -------------------------------------------------------------------------------- 521 522 @Override 523 public CommandResult createAllocationPriorityDescription(UserVisitPK userVisitPK, CreateAllocationPriorityDescriptionForm form) { 524 return new CreateAllocationPriorityDescriptionCommand(userVisitPK, form).run(); 525 } 526 527 @Override 528 public CommandResult getAllocationPriorityDescription(UserVisitPK userVisitPK, GetAllocationPriorityDescriptionForm form) { 529 return new GetAllocationPriorityDescriptionCommand(userVisitPK, form).run(); 530 } 531 532 @Override 533 public CommandResult getAllocationPriorityDescriptions(UserVisitPK userVisitPK, GetAllocationPriorityDescriptionsForm form) { 534 return new GetAllocationPriorityDescriptionsCommand(userVisitPK, form).run(); 535 } 536 537 @Override 538 public CommandResult editAllocationPriorityDescription(UserVisitPK userVisitPK, EditAllocationPriorityDescriptionForm form) { 539 return new EditAllocationPriorityDescriptionCommand(userVisitPK, form).run(); 540 } 541 542 @Override 543 public CommandResult deleteAllocationPriorityDescription(UserVisitPK userVisitPK, DeleteAllocationPriorityDescriptionForm form) { 544 return new DeleteAllocationPriorityDescriptionCommand(userVisitPK, form).run(); 545 } 546 547}