@restforgejs/platform 5.1.7 → 5.1.20

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 (208) hide show
  1. package/bin/restforge-hwinfo-linux +0 -0
  2. package/bin/restforge-hwinfo.exe +0 -0
  3. package/build-info.json +2 -2
  4. package/cli/consumer-deploy.js +1 -1
  5. package/cli/consumer.js +1 -1
  6. package/generators/cli/catalog/dbschema.js +2 -1
  7. package/generators/cli/endpoint/list.js +264 -0
  8. package/generators/cli/fast-track.js +395 -37
  9. package/generators/cli/payload/generate.js +10 -2
  10. package/generators/cli/processor/create.js +7 -7
  11. package/generators/cli/processor/list.js +229 -0
  12. package/generators/cli/schema/apply.js +6 -1
  13. package/generators/cli/schema/diff.js +6 -1
  14. package/generators/cli/schema/introspect.js +32 -11
  15. package/generators/lib/data/db-executor.js +8 -8
  16. package/generators/lib/data/envelope.js +3 -3
  17. package/generators/lib/dbschema-kit/apply-engine.js +20 -0
  18. package/generators/lib/dbschema-kit/dialect/mysql.js +2 -0
  19. package/generators/lib/dbschema-kit/dialect/oracle.js +2 -0
  20. package/generators/lib/dbschema-kit/dialect/postgres.js +4 -0
  21. package/generators/lib/dbschema-kit/dialect/sqlite.js +5 -0
  22. package/generators/lib/dbschema-kit/diff-engine.js +22 -1
  23. package/generators/lib/dbschema-kit/diff-reporter.js +293 -272
  24. package/generators/lib/dbschema-kit/emitters/create-index.js +23 -1
  25. package/generators/lib/dbschema-kit/emitters/create-table.js +48 -0
  26. package/generators/lib/dbschema-kit/introspect-mapper.js +154 -2
  27. package/generators/lib/dbschema-kit/ir-builder.js +84 -1
  28. package/generators/lib/dbschema-kit/schema-printer.js +20 -0
  29. package/generators/lib/dbschema-kit/soft-delete-constants.js +111 -0
  30. package/generators/lib/dbschema-kit/validator/schema-validator.js +231 -0
  31. package/generators/lib/generators/dashboard-generator.js +5 -5
  32. package/generators/lib/generators/processor-validation-generator.js +16 -16
  33. package/generators/lib/payload/payload-runner.js +774 -1
  34. package/generators/lib/payload/schema-diff.js +7 -0
  35. package/generators/lib/templates/dashboard-catalog.js +1 -1
  36. package/generators/lib/templates/db-connection-env.js +1 -1
  37. package/generators/lib/templates/dbschema-catalog.js +1 -1
  38. package/generators/lib/templates/field-validation-catalog.js +1 -1
  39. package/generators/lib/templates/mysql-template.js +1 -1
  40. package/generators/lib/templates/oracle-template.js +1 -1
  41. package/generators/lib/templates/postgres-template.js +1 -1
  42. package/generators/lib/templates/query-declarative-catalog.js +1 -1
  43. package/generators/lib/templates/sqlite-template.js +1 -1
  44. package/generators/lib/utils/database-introspector.js +48 -0
  45. package/generators/lib/utils/env-manager.js +4 -4
  46. package/generators/lib/utils/file-utils.js +6 -6
  47. package/generators/lib/utils/payload-processor.js +18 -2
  48. package/generators/lib/validators/argument-validator.js +2 -2
  49. package/generators/lib/validators/dashboard-validator.js +35 -1
  50. package/generators/lib/validators/payload-validator.js +460 -33
  51. package/integrity-manifest.json +20 -20
  52. package/package.json +2 -1
  53. package/scripts/check-install.js +8 -8
  54. package/scripts/verify-integrity.js +1 -1
  55. package/server.js +1 -1
  56. package/src/components/handlers/adjust_handler.js +1 -1
  57. package/src/components/handlers/audit_handler.js +1 -1
  58. package/src/components/handlers/delete_handler.js +1 -1
  59. package/src/components/handlers/export_handler.js +1 -1
  60. package/src/components/handlers/import_handler.js +1 -1
  61. package/src/components/handlers/insert_handler.js +1 -1
  62. package/src/components/handlers/update_handler.js +1 -1
  63. package/src/components/handlers/upload_handler.js +1 -1
  64. package/src/components/handlers/workflow_handler.js +1 -1
  65. package/src/components/integrations/webhook.js +1 -1
  66. package/src/consumers/baseConsumer.js +1 -1
  67. package/src/consumers/declarativeMapper.js +1 -1
  68. package/src/consumers/handlers/apiHandler.js +1 -1
  69. package/src/consumers/handlers/consoleHandler.js +1 -1
  70. package/src/consumers/handlers/databaseHandler.js +1 -1
  71. package/src/consumers/handlers/index.js +1 -1
  72. package/src/consumers/handlers/kafkaHandler.js +1 -1
  73. package/src/consumers/index.js +1 -1
  74. package/src/consumers/messageTransformer.js +1 -1
  75. package/src/consumers/validator.js +1 -1
  76. package/src/core/db/dialect/base-dialect.js +1 -1
  77. package/src/core/db/dialect/index.js +1 -1
  78. package/src/core/db/dialect/mysql-dialect.js +1 -1
  79. package/src/core/db/dialect/oracle-dialect.js +1 -1
  80. package/src/core/db/dialect/postgres-dialect.js +1 -1
  81. package/src/core/db/dialect/sqlite-dialect.js +1 -1
  82. package/src/core/db/flatten-helper.js +1 -1
  83. package/src/core/db/query-builder-error.js +1 -1
  84. package/src/core/db/query-builder.js +1 -1
  85. package/src/core/db/relation-helper.js +1 -1
  86. package/src/core/handlers/delete_handler.js +1 -1
  87. package/src/core/handlers/insert_handler.js +1 -1
  88. package/src/core/handlers/update_handler.js +1 -1
  89. package/src/core/models/base-model.js +1 -1
  90. package/src/core/utils/cache-manager.js +1 -1
  91. package/src/core/utils/component-engine.js +1 -1
  92. package/src/core/utils/context-builder.js +1 -1
  93. package/src/core/utils/datetime-formatter.js +1 -1
  94. package/src/core/utils/datetime-parser.js +1 -1
  95. package/src/core/utils/db.js +1 -1
  96. package/src/core/utils/logger.js +1 -1
  97. package/src/core/utils/payload-loader.js +1 -1
  98. package/src/core/utils/security-checks.js +1 -1
  99. package/src/middleware/body-options.js +1 -1
  100. package/src/middleware/cors.js +1 -1
  101. package/src/middleware/idempotency.js +1 -1
  102. package/src/middleware/rate-limiter.js +1 -1
  103. package/src/middleware/request-logger.js +1 -1
  104. package/src/middleware/security-headers.js +1 -1
  105. package/src/models/base-model-mysql.js +1 -1
  106. package/src/models/base-model-oracle.js +1 -1
  107. package/src/models/base-model-sqlite.js +1 -1
  108. package/src/models/base-model.js +1 -1
  109. package/src/pro/caching/redis-client.js +1 -1
  110. package/src/pro/caching/redis-helper.js +1 -1
  111. package/src/pro/consumers/baseConsumer.js +1 -1
  112. package/src/pro/consumers/declarativeMapper.js +1 -1
  113. package/src/pro/consumers/handlers/apiHandler.js +1 -1
  114. package/src/pro/consumers/handlers/consoleHandler.js +1 -1
  115. package/src/pro/consumers/handlers/databaseHandler.js +1 -1
  116. package/src/pro/consumers/handlers/index.js +1 -1
  117. package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
  118. package/src/pro/consumers/index.js +1 -1
  119. package/src/pro/consumers/messageTransformer.js +1 -1
  120. package/src/pro/consumers/validator.js +1 -1
  121. package/src/pro/database/base-model-mysql.js +1 -1
  122. package/src/pro/database/base-model-oracle.js +1 -1
  123. package/src/pro/database/base-model-sqlite.js +1 -1
  124. package/src/pro/database/db-mysql.js +1 -1
  125. package/src/pro/database/db-oracle.js +1 -1
  126. package/src/pro/database/db-sqlite.js +1 -1
  127. package/src/pro/excel/excel-generator.js +1 -1
  128. package/src/pro/excel/excel-parser.js +1 -1
  129. package/src/pro/excel/export-service.js +1 -1
  130. package/src/pro/excel/export_handler.js +1 -1
  131. package/src/pro/excel/import-service.js +1 -1
  132. package/src/pro/excel/import-validator.js +1 -1
  133. package/src/pro/excel/import_handler.js +1 -1
  134. package/src/pro/excel/upsert-builder.js +1 -1
  135. package/src/pro/idgen/idgen-routes.js +1 -1
  136. package/src/pro/integrations/lookup-resolver.js +1 -1
  137. package/src/pro/integrations/upload-handler-v2.js +1 -1
  138. package/src/pro/integrations/upload-handler.js +1 -1
  139. package/src/pro/integrations/webhook.js +1 -1
  140. package/src/pro/locking/lock-routes.js +1 -1
  141. package/src/pro/locking/resource-lock-manager.js +1 -1
  142. package/src/pro/messaging/kafkaConsumerService.js +1 -1
  143. package/src/pro/messaging/kafkaService.js +1 -1
  144. package/src/pro/messaging/messagehubService.js +1 -1
  145. package/src/pro/messaging/rabbitmqService.js +1 -1
  146. package/src/pro/scheduler/job-manager.js +1 -1
  147. package/src/pro/scheduler/job-routes.js +1 -1
  148. package/src/pro/scheduler/job-validator.js +1 -1
  149. package/src/pro/storage/base-storage-provider.js +1 -1
  150. package/src/pro/storage/file-metadata-helper.js +1 -1
  151. package/src/pro/storage/index.js +1 -1
  152. package/src/pro/storage/local-storage-provider.js +1 -1
  153. package/src/pro/storage/s3-storage-provider.js +1 -1
  154. package/src/pro/storage/upload-cleanup-job.js +1 -1
  155. package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
  156. package/src/pro/storage/upload-pending-tracker.js +1 -1
  157. package/src/pro/websocket/broadcast-helper.js +1 -1
  158. package/src/pro/websocket/index.js +1 -1
  159. package/src/pro/websocket/livesync-server.js +1 -1
  160. package/src/pro/websocket/ws-broadcaster.js +1 -1
  161. package/src/services/export-service.js +1 -1
  162. package/src/services/import-service.js +1 -1
  163. package/src/services/kafkaConsumerService.js +1 -1
  164. package/src/services/kafkaService.js +1 -1
  165. package/src/services/messagehubService.js +1 -1
  166. package/src/services/rabbitmqService.js +1 -1
  167. package/src/utils/cache-invalidation-registry.js +1 -1
  168. package/src/utils/cache-manager.js +1 -1
  169. package/src/utils/component-engine.js +1 -1
  170. package/src/utils/config-extractor.js +1 -1
  171. package/src/utils/consumerLogger.js +1 -1
  172. package/src/utils/context-builder.js +1 -1
  173. package/src/utils/dashboard-helpers.js +1 -1
  174. package/src/utils/dateHelper.js +1 -1
  175. package/src/utils/datetime-formatter.js +1 -1
  176. package/src/utils/datetime-parser.js +1 -1
  177. package/src/utils/db-bootstrap.js +1 -1
  178. package/src/utils/db-mysql.js +1 -1
  179. package/src/utils/db-oracle.js +1 -1
  180. package/src/utils/db-sqlite.js +1 -1
  181. package/src/utils/db.js +1 -1
  182. package/src/utils/demo-generator.js +1 -1
  183. package/src/utils/excel-generator.js +1 -1
  184. package/src/utils/excel-parser.js +1 -1
  185. package/src/utils/file-watcher.js +1 -1
  186. package/src/utils/id-generator.js +1 -1
  187. package/src/utils/idempotency-manager.js +1 -1
  188. package/src/utils/import-validator.js +1 -1
  189. package/src/utils/license-client.js +1 -1
  190. package/src/utils/lock-manager.js +1 -1
  191. package/src/utils/logger.js +1 -1
  192. package/src/utils/lookup-resolver.js +1 -1
  193. package/src/utils/payload-loader.js +1 -1
  194. package/src/utils/processor-response.js +1 -1
  195. package/src/utils/rabbitmq.js +1 -1
  196. package/src/utils/redis-client.js +1 -1
  197. package/src/utils/redis-helper.js +1 -1
  198. package/src/utils/request-scope.js +1 -1
  199. package/src/utils/security-checks.js +1 -1
  200. package/src/utils/service-resolver.js +1 -1
  201. package/src/utils/shutdown-coordinator.js +1 -1
  202. package/src/utils/soft-delete-dashboard-guard.js +1 -0
  203. package/src/utils/sql-table-extractor.js +1 -0
  204. package/src/utils/trusted-keys.js +1 -1
  205. package/src/utils/upload-handler.js +1 -1
  206. package/src/utils/upsert-builder.js +1 -1
  207. package/src/utils/workflow-hook-executor.js +1 -1
  208. package/generators/lib/utils/sql-table-extractor.js +0 -83
@@ -1 +1 @@
1
- (function(_0x40ccce,_0x4d0cc9){const _0x57428c=a0_0x18d6,_0x1f7a0f=_0x40ccce();while(!![]){try{const _0x14b451=parseInt(_0x57428c(0x1bb))/0x1+-parseInt(_0x57428c(0x2eb))/0x2*(-parseInt(_0x57428c(0x28a))/0x3)+-parseInt(_0x57428c(0x2c0))/0x4*(-parseInt(_0x57428c(0x2a9))/0x5)+-parseInt(_0x57428c(0x2c3))/0x6+-parseInt(_0x57428c(0x213))/0x7+parseInt(_0x57428c(0x258))/0x8+-parseInt(_0x57428c(0x282))/0x9*(parseInt(_0x57428c(0x2b3))/0xa);if(_0x14b451===_0x4d0cc9)break;else _0x1f7a0f['push'](_0x1f7a0f['shift']());}catch(_0x540093){_0x1f7a0f['push'](_0x1f7a0f['shift']());}}}(a0_0x1b19,0x65636));const FileUtils=require('../utils/file-utils');function assertNoFileReferenceLeftover(_0x2e80dc){const _0x90eb9f=a0_0x18d6,_0x49730c={'PbNhG':'viewQuery','lFuvQ':'masterDetail.detailConfig.detailQuery','IzcgV':function(_0x5cba38,_0x1741d8){return _0x5cba38===_0x1741d8;},'UcfgD':'string'},_0x18898e=[[_0x90eb9f(0x241),_0x2e80dc[_0x90eb9f(0x241)]],[_0x49730c['PbNhG'],_0x2e80dc['viewQuery']],[_0x49730c['lFuvQ'],_0x2e80dc[_0x90eb9f(0x1d9)]&&_0x2e80dc['masterDetail'][_0x90eb9f(0x267)]&&_0x2e80dc['masterDetail'][_0x90eb9f(0x267)][_0x90eb9f(0x1c4)]]];for(const [_0x2e2e9e,_0x94fc84]of _0x18898e){if(_0x49730c[_0x90eb9f(0x1eb)](typeof _0x94fc84,_0x49730c[_0x90eb9f(0x211)])&&_0x94fc84[_0x90eb9f(0x307)](_0x90eb9f(0x25e)))throw new Error(_0x90eb9f(0x1ae)+_0x2e2e9e+_0x90eb9f(0x1dc)+_0x94fc84+_0x90eb9f(0x2af)+'Expected\x20expanded\x20SQL\x20string.\x20Check\x20PayloadProcessor.processFileReferences\x20flow.');}}function buildValidFieldsString(_0x327761){const _0x3fa452=a0_0x18d6,_0x5d59e6={'lEkpC':',\x0a\x20\x20\x20\x20\x20\x20'},_0x5dd5cd=_0x327761[_0x3fa452(0x2ac)]||[];return _0x5dd5cd[_0x3fa452(0x2fd)](_0x3c70f7=>'\x27'+_0x3c70f7+'\x27')[_0x3fa452(0x215)](_0x5d59e6['lEkpC']);}function a0_0x18d6(_0x75318a,_0x31e553){_0x75318a=_0x75318a-0x18f;const _0x1b193c=a0_0x1b19();let _0x18d6b4=_0x1b193c[_0x75318a];if(a0_0x18d6['Nvcbme']===undefined){var _0x4ee852=function(_0x3236f3){const _0x3a91c0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x245dbb='',_0x7d196c='';for(let _0x38a495=0x0,_0x11cfdc,_0x23528e,_0x104ced=0x0;_0x23528e=_0x3236f3['charAt'](_0x104ced++);~_0x23528e&&(_0x11cfdc=_0x38a495%0x4?_0x11cfdc*0x40+_0x23528e:_0x23528e,_0x38a495++%0x4)?_0x245dbb+=String['fromCharCode'](0xff&_0x11cfdc>>(-0x2*_0x38a495&0x6)):0x0){_0x23528e=_0x3a91c0['indexOf'](_0x23528e);}for(let _0x17a0d6=0x0,_0x3e7eb6=_0x245dbb['length'];_0x17a0d6<_0x3e7eb6;_0x17a0d6++){_0x7d196c+='%'+('00'+_0x245dbb['charCodeAt'](_0x17a0d6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x7d196c);};a0_0x18d6['EFZcZE']=_0x4ee852,a0_0x18d6['LSIWJv']={},a0_0x18d6['Nvcbme']=!![];}const _0x184c13=_0x1b193c[0x0],_0x27da2e=_0x75318a+_0x184c13,_0x28a8a1=a0_0x18d6['LSIWJv'][_0x27da2e];return!_0x28a8a1?(_0x18d6b4=a0_0x18d6['EFZcZE'](_0x18d6b4),a0_0x18d6['LSIWJv'][_0x27da2e]=_0x18d6b4):_0x18d6b4=_0x28a8a1,_0x18d6b4;}function buildAuditColumnsSection(_0xf20907,_0x2b2a89){const _0x3e1781=a0_0x18d6,_0x21654e={'vQeOx':_0x3e1781(0x1a5),'tDcuw':function(_0x56c1dc,_0x58e68a){return _0x56c1dc===_0x58e68a;},'OnLfG':'object','LjzZB':_0x3e1781(0x29e)};if(!(_0x21654e['vQeOx']in _0xf20907))return'';const _0x44700d=_0xf20907['auditColumns'];if(_0x44700d===![]||_0x21654e[_0x3e1781(0x230)](_0x44700d,null))return'\x0a'+_0x2b2a89+_0x3e1781(0x31c)+_0x2b2a89+'this.auditColumns\x20=\x20null;\x0a';if(_0x21654e['tDcuw'](typeof _0x44700d,_0x21654e['OnLfG'])&&!Array['isArray'](_0x44700d)){const _0x1ec0f8=[_0x21654e['LjzZB'],'createdBy',_0x3e1781(0x198),_0x3e1781(0x1aa)],_0x53477c={};_0x1ec0f8['forEach'](_0x12d9ae=>{if(_0x44700d[_0x12d9ae]!==undefined)_0x53477c[_0x12d9ae]=_0x44700d[_0x12d9ae];});const _0x2019e0=JSON['stringify'](_0x53477c,null,0x2)[_0x3e1781(0x2bf)]('\x0a')[_0x3e1781(0x2fd)]((_0x2bfcf0,_0x1f9245)=>_0x1f9245===0x0?_0x2bfcf0:_0x2b2a89+_0x2bfcf0)[_0x3e1781(0x215)]('\x0a');return'\x0a'+_0x2b2a89+'//\x20Custom\x20audit\x20columns\x20mapping\x20dari\x20payload\x0a'+_0x2b2a89+'this.auditColumns\x20=\x20'+_0x2019e0+';\x0a';}throw new Error('Invalid\x20auditColumns\x20value\x20for\x20'+_0xf20907[_0x3e1781(0x263)]+_0x3e1781(0x2a4));}function buildSearchColumnsCode(_0x34fbe5){const _0x5a0eb5=a0_0x18d6;if(!_0x34fbe5['searchColumns']||!Array['isArray'](_0x34fbe5[_0x5a0eb5(0x1b6)]))return'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20definisi\x20kolom\x20yang\x20dapat\x20dicari\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Kolom\x20yang\x20dapat\x20dicari\x0a\x20\x20\x20*/\x0a\x20\x20getSearchableColumns()\x20{\x0a\x20\x20\x20\x20return\x20'+JSON['stringify'](_0x34fbe5['searchColumns'],null,0x4)+_0x5a0eb5(0x1f6);}function buildFiltersCode(_0x1f8531){const _0xed0520=a0_0x18d6;if(!_0x1f8531[_0xed0520(0x279)]||!Array['isArray'](_0x1f8531['filters']))return'';return _0xed0520(0x226)+JSON['stringify'](_0x1f8531['filters'],null,0x4)+';\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Membangun\x20clause\x20WHERE\x20berdasarkan\x20filter\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Filter\x20options\x0a\x20\x20\x20*\x20@returns\x20{String}\x20Clause\x20WHERE\x20SQL\x0a\x20\x20\x20*/\x0a\x20\x20buildFilterWhereClause(options)\x20{\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20\x20\x20const\x20filters\x20=\x20this.getAvailableFilters();\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(filters))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20filter\x20berdasarkan\x20tipe\x0a\x20\x20\x20\x20for\x20(const\x20filter\x20of\x20filters)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20filterValue\x20=\x20options[filter.name];\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(!filterValue\x20||\x20filterValue\x20===\x20\x27\x27\x20||\x20filterValue\x20===\x20\x27-\x27\x20||\x20filterValue\x20===\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20switch\x20(filter.type)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27combobox\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27select\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20filterValue.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${filter.targetField})\x20=\x20UPPER(\x27${escapedValue}\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27daterange\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filterValue\x20===\x20\x27custom_range\x27\x20&&\x20options[filter.startField]\x20&&\x20options[filter.endField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20startDate\x20=\x20options[filter.startField];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endDate\x20=\x20options[filter.endField];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${filter.targetField}\x20BETWEEN\x20\x27${startDate}\x27\x20AND\x20\x27${endDate}\x27`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27text\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20filterValue.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${filter.targetField})\x20LIKE\x20UPPER(\x27%${escapedValue}%\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27number\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField\x20&&\x20!isNaN(filterValue))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${filter.targetField}\x20=\x20${filterValue}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20conditions.length\x20>\x200\x20?\x20`WHERE\x20${conditions.join(\x27\x20AND\x20\x27)}`\x20:\x20\x27\x27;\x0a\x20\x20}';}function buildDefaultScopeSQL(_0x5516a8,_0x15a075='a.'){const _0x560c4a=a0_0x18d6,_0x51cef9={'xrtYX':function(_0x289b66,_0x503847){return _0x289b66!==_0x503847;},'VVcyg':'object','DBbNN':function(_0x3a4fe4,_0x543658){return _0x3a4fe4===_0x543658;},'asViu':_0x560c4a(0x225),'eWKGe':'string','IwKxR':function(_0x3d3e1f,_0x5991d8){return _0x3d3e1f===_0x5991d8;}};if(!_0x5516a8||_0x51cef9[_0x560c4a(0x196)](typeof _0x5516a8,_0x51cef9[_0x560c4a(0x19d)]))return'';const _0x44935d=[];for(const [_0x5806a6,_0xea951e]of Object['entries'](_0x5516a8)){if(_0x51cef9[_0x560c4a(0x24d)](typeof _0xea951e,_0x51cef9[_0x560c4a(0x191)]))_0x44935d['push'](''+_0x15a075+_0x5806a6+_0x560c4a(0x1d4)+_0xea951e);else{if(typeof _0xea951e===_0x51cef9[_0x560c4a(0x2b1)])_0x44935d['push'](''+_0x15a075+_0x5806a6+_0x560c4a(0x25b)+_0xea951e['replace'](/'/g,'\x27\x27')+'\x27');else _0x51cef9['IwKxR'](typeof _0xea951e,'number')&&_0x44935d[_0x560c4a(0x2f5)](''+_0x15a075+_0x5806a6+'\x20=\x20'+_0xea951e);}}return _0x44935d[_0x560c4a(0x215)]('\x20AND\x20');}function buildRequestScopeMiddleware(_0xbde969,_0x472a59){const _0x2682fd=a0_0x18d6;if(!_0xbde969['requestScope'])return'';const {column:_0x258083,source:_0x1c46b4,bypassRoles:_0x1c6af2}=_0xbde969['requestScope'],_0x178e1d=JSON[_0x2682fd(0x25d)](_0x1c6af2||[]),_0x1d8a8b=(_0x472a59||'')[_0x2682fd(0x269)](/-/g,'_');return'\x0a//\x20───\x20Request\x20Scope\x20Middleware\x20(Layer\x201\x20RLS)\x20──────────────────────────\x0a//\x20Dynamic\x20per-request\x20filtering\x20by\x20\x27'+_0x258083+'\x27\x20from\x20'+_0x1c46b4+_0x2682fd(0x20d)+_0x178e1d+';\x0a\x20\x20if\x20(bypassRoles.length\x20>\x200\x20&&\x20bypassRoles.some(role\x20=>\x20userRoles.includes(role)))\x20{\x0a\x20\x20\x20\x20return\x20next();\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Read\x20scope\x20value\x20from\x20user\x20context\x0a\x20\x20const\x20scopeValue\x20=\x20'+_0x1c46b4+_0x2682fd(0x1a8)+_0x258083+_0x2682fd(0x1dd)+_0x258083+_0x2682fd(0x190)+_0x258083+_0x2682fd(0x19b)+_0x258083+_0x2682fd(0x20b)+_0x1d8a8b+_0x2682fd(0x204)+_0x258083+_0x2682fd(0x2a6);}function buildLookupOverrideCode(_0x4dc405,_0x53843d){const _0x69dbc6=a0_0x18d6,_0x4099f1=FileUtils[_0x69dbc6(0x1cc)](_0x53843d['fieldName']||[]),_0x15b93a=FileUtils['toPascalCase'](_0x4dc405),_0x2f6dd0=_0x53843d['_extendedFields']||{'all':_0x53843d['fieldName']||[]},_0x10bdd5=_0x53843d['primaryKey']||_0x53843d[_0x69dbc6(0x2ac)]&&_0x53843d[_0x69dbc6(0x2ac)][0x0]||'id',_0x2af938=_0x53843d[_0x69dbc6(0x29c)]&&_0x53843d[_0x69dbc6(0x29c)][_0x69dbc6(0x1d2)]?buildDefaultScopeSQL(_0x53843d[_0x69dbc6(0x29c)]['lookup']):'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20FROM\x20clause\x20untuk\x20lookup\x20berdasarkan\x20prioritas\x20resolusi\x20sumber\x20data\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(konsisten\x20dengan\x20/read\x20dan\x20/first)\x0a\x20\x20\x20*\x20@returns\x20{string}\x20FROM\x20clause\x20dengan\x20alias\x20\x27a\x27\x0a\x20\x20\x20*/\x0a\x20\x20getLookupSource()\x20{\x0a\x20\x20\x20\x20const\x20readQuery\x20=\x20this.getReadQuery();\x0a\x20\x20\x20\x20const\x20simpleQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20if\x20(readQuery.trim()\x20!==\x20simpleQuery)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20viewName\x20atau\x20viewQuery\x20aktif\x20—\x20bungkus\x20sebagai\x20subquery\x0a\x20\x20\x20\x20\x20\x20return\x20\x27(\x27\x20+\x20readQuery\x20+\x20\x27)\x20a\x27;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20this.readSource\x20+\x20\x27\x20a\x27;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0x4099f1+_0x69dbc6(0x295)+_0x10bdd5+',\x20'+_0x4099f1+_0x69dbc6(0x278)+_0x4099f1+_0x69dbc6(0x280)+(_0x2af938?_0x69dbc6(0x19a)+_0x2af938:'')+_0x69dbc6(0x2d9)+_0x4099f1+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20params\x20=\x20[`%${search\x20||\x20\x27\x27}%`];\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x10bdd5+_0x69dbc6(0x285)+_0x4099f1+'\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupData\x20('+_0x15b93a+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Dynamic\x20lookup\x20dengan\x20support\x20filtering\x20tambahan\x20dan\x20pencarian\x20multi-field\x0a\x20\x20\x20*\x20@param\x20{string}\x20search\x20-\x20Kata\x20kunci\x20pencarian\x0a\x20\x20\x20*\x20@param\x20{Object}\x20extraFilters\x20-\x20Filter\x20tambahan\x20(misal:\x20company_id)\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Array\x20objek\x20hasil\x20lookup\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getLookupDataDynamic(search,\x20extraFilters\x20=\x20{})\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20custom\x20lookup\x20config\x20jika\x20ada,\x20fallback\x20ke\x20textFields\x20detection\x0a\x20\x20\x20\x20\x20\x20const\x20lookupConfig\x20=\x20'+JSON['stringify'](_0x53843d['_lookupConfig']||null)+_0x69dbc6(0x298)+JSON[_0x69dbc6(0x25d)](_0x2f6dd0[_0x69dbc6(0x1a0)]||[_0x4099f1])+';\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20whereConditions\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a'+(_0x2af938?_0x69dbc6(0x26f)+_0x2af938+_0x69dbc6(0x235):'')+_0x69dbc6(0x24f)+JSON['stringify'](_0x53843d['fieldName']||[])+'.includes(key))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`a.${key}\x20=\x20$${paramIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20final\x20query\x20-\x20gunakan\x20custom\x20select\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20idField\x20=\x20lookupConfig\x20?\x20lookupConfig.idField\x20:\x20\x27'+_0x10bdd5+_0x69dbc6(0x259)+_0x10bdd5+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item[lookupConfig\x20&&\x20lookupConfig.hasCustomText\x20?\x20\x27display_text\x27\x20:\x20textFields[0]]\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataDynamic\x20('+_0x15b93a+_0x69dbc6(0x214)+_0x4099f1+'\x27\x20yang\x20benar\x0a\x20\x20\x20*\x20@param\x20{string}\x20selectedTag\x20-\x20ID\x20yang\x20dipilih\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Array\x20objek\x20hasil\x20lookup\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getStaticLookupData(selectedTag)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20cache\x20first\x20(if\x20enabled)\x20-\x20cache\x20tanpa\x20selectedTag\x20karena\x20data\x20sama\x0a\x20\x20\x20\x20\x20\x20const\x20cacheOptions\x20=\x20{\x20type:\x20\x27static\x27\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedLookup(cacheOptions,\x20\x27static\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Apply\x20selectedTag\x20to\x20cached\x20result\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item.id\x20===\x20selectedTag)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x20...item,\x20selected:\x20\x27true\x27\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x20id:\x20item.id,\x20text:\x20item.text\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20\x27SELECT\x20'+_0x10bdd5+',\x20'+_0x4099f1+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20`'+(_0x2af938?'\x20WHERE\x20'+_0x2af938:'')+_0x69dbc6(0x2d9)+_0x4099f1+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20result\x20tanpa\x20selected\x20flag\x0a\x20\x20\x20\x20\x20\x20const\x20cacheData\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x10bdd5+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x4099f1+'\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20cacheData,\x20\x27static\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Return\x20dengan\x20selected\x20flag\x0a\x20\x20\x20\x20\x20\x20return\x20data.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x10bdd5+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x4099f1+_0x69dbc6(0x2ce)+_0x10bdd5+_0x69dbc6(0x252)+_0x15b93a+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Method\x20untuk\x20lookup\x20data\x20dengan\x20filtering\x20(where\x20clause)\x20dan\x20custom\x20select\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Options\x20dengan\x20where\x20dan\x20select\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Array\x20objek\x20hasil\x20lookup\x20dengan\x20format\x20{id,\x20text}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getLookupDataWithFilter(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20cache\x20first\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20const\x20cacheOptions\x20=\x20{\x20...options,\x20type:\x20\x27filter\x27\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedLookup(cacheOptions,\x20\x27filter\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20selectColumns\x20=\x20options.select\x20||\x20[\x27'+_0x10bdd5+'\x27,\x20\x27'+_0x4099f1+'\x27];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Parse\x20dan\x20validasi\x20select\x20columns\x20untuk\x20support\x20SQL\x20expressions\x0a\x20\x20\x20\x20\x20\x20const\x20validTextFields\x20=\x20'+JSON['stringify'](_0x2f6dd0['textFields']||[])+';\x0a\x20\x20\x20\x20\x20\x20let\x20selectClause\x20=\x20\x27'+_0x10bdd5+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20textField\x20=\x20\x27'+_0x4099f1+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20aliasField\x20=\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Proses\x20setiap\x20column\x20dalam\x20select\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20column\x20of\x20selectColumns)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(column.toLowerCase()\x20===\x20\x27'+_0x10bdd5+'\x27.toLowerCase())\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x20//\x20primary\x20key\x20sudah\x20ada\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20ada\x20SQL\x20expression\x20dengan\x20alias\x20(menggunakan\x20AS)\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20aliasRegex\x20=\x20new\x20RegExp(\x27(.+)\x5c\x5cs+as\x5c\x5cs+(\x5c\x5cw+)$\x27,\x20\x27i\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20aliasMatch\x20=\x20column.match(aliasRegex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(aliasMatch)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20expression\x20=\x20aliasMatch[1].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20alias\x20=\x20aliasMatch[2].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${expression}\x20AS\x20${alias}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20aliasField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x20//\x20gunakan\x20yang\x20pertama\x20sebagai\x20text\x20field\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20simple\x20field\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(validTextFields.includes(column)\x20||\x20column\x20===\x20\x27'+_0x4099f1+_0x69dbc6(0x2dd)+(_0x2af938?'WHERE\x20'+_0x2af938+'\x20':'')+_0x69dbc6(0x2d8)+(_0x2af938?'AND\x20(':_0x69dbc6(0x1cf))+_0x69dbc6(0x224)+(_0x2af938?')':'')+_0x69dbc6(0x29f)+_0x10bdd5+'\x27)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(direction\x20!==\x20\x27ASC\x27\x20&&\x20direction\x20!==\x20\x27DESC\x27)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${column}\x20${direction}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}).filter(Boolean);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(orderParts.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27No\x20valid\x20sort\x20columns\x20provided\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${orderParts.join(\x27,\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Order\x20by\x20text\x20field\x20(gunakan\x20alias\x20jika\x20ada)\x20-\x20default\x20behavior\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${aliasField\x20||\x20textField}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20DEBUG\x20'+_0x4dc405[_0x69dbc6(0x2ab)]()+'\x20LOOKUP\x20WITH\x20FILTER\x20===\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20SQL:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Parameters:\x27,\x20params);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Selected\x20columns:\x27,\x20selectColumns);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Sort\x20columns:\x27,\x20options.sort_columns\x20||\x20\x27none\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Valid\x20fields\x20for\x20ordering:\x27,\x20this.validFields);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Text\x20field:\x27,\x20textField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Alias\x20field:\x27,\x20aliasField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20END\x20DEBUG\x20===\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Eksekusi\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20hasil\x20untuk\x20lookup\x20(id\x20dan\x20text)\x20-\x20gunakan\x20alias\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20textFieldName\x20=\x20aliasField\x20||\x20textField;\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x10bdd5+_0x69dbc6(0x249)+_0x4099f1+'\x20||\x20item.name\x20||\x20item.code\x20||\x20item.description\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter\x20('+_0x15b93a+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}';}function buildAdvancedQuerySection(_0x121215){const _0x590e33=a0_0x18d6,_0x16eb72={'FVVOp':_0x590e33(0x29d)},_0x98af90=_0x121215['advancedQueries']||{};if(Object[_0x590e33(0x1e4)](_0x98af90)['length']===0x0)return _0x16eb72['FVVOp'];return'\x0a\x20\x20\x20\x20//\x20Load\x20advanced\x20query\x20templates\x0a\x20\x20\x20\x20const\x20queryDefinitions\x20=\x20{\x0a'+Object[_0x590e33(0x1af)](_0x98af90)[_0x590e33(0x2fd)](([_0x469e88,_0x5c67bc])=>'\x20\x20\x20\x20\x20\x20\x22'+_0x469e88+_0x590e33(0x2e2)+JSON[_0x590e33(0x25d)](_0x5c67bc))['join'](',\x0a')+_0x590e33(0x193);}function buildQueryLoadingCode(_0x3fd006,_0x375cf2){const _0x5d98a5=a0_0x18d6,_0x6de1e4={'UorWh':'${payload.tableName\x20||\x20\x22undefined_table\x22}'};if(!_0x3fd006)return'let\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;';const _0x459d64=_0x3fd006[_0x5d98a5(0x269)](/\$\{tableName\}/g,_0x6de1e4[_0x5d98a5(0x1b0)])[_0x5d98a5(0x269)](/\$\{this\.table\}/g,_0x6de1e4[_0x5d98a5(0x1b0)]);return _0x5d98a5(0x22f)+_0x459d64+'`.trim();';}function buildFieldMappingCode(_0x540a57){const _0x4f7c67=a0_0x18d6,_0x16f6db=_0x540a57['_extendedFields']||{};return _0x4f7c67(0x247)+JSON['stringify'](_0x16f6db['textFields']||[])+',\x0a\x20\x20\x20\x20\x20\x20dateFields:\x20'+JSON[_0x4f7c67(0x25d)](_0x16f6db['dateFields']||[])+_0x4f7c67(0x1a2)+JSON['stringify'](_0x16f6db['requiredFields']||[])+',\x0a\x20\x20\x20\x20\x20\x20primaryTextField:\x20\x27'+(_0x16f6db['primaryTextField']||'name')+'\x27,\x0a\x20\x20\x20\x20\x20\x20searchableFields:\x20this.getSearchableColumns\x20?\x20this.getSearchableColumns().map(col\x20=>\x20col.name)\x20:\x20[]\x0a\x20\x20\x20\x20};\x0a\x20\x20}';}function _generateValidationConfig(_0x6ea724){const _0x332a6d=a0_0x18d6,_0x2d08c8={'lytVh':'\x20\x20\x20\x20this.validationConfig\x20=\x20{};\x20//\x20No\x20field\x20validation\x20config\x0a'};if(!_0x6ea724||!Array['isArray'](_0x6ea724)||_0x6ea724[_0x332a6d(0x1a3)]===0x0)return _0x2d08c8['lytVh'];const _0x556aeb=_0x6ea724['map'](_0x1a48c5=>{const _0x5e05fd=_0x332a6d,_0xb92be1=JSON['stringify'](_0x1a48c5[_0x5e05fd(0x232)]||{},null,0x6)[_0x5e05fd(0x269)](/\n/g,_0x5e05fd(0x2a2));return _0x5e05fd(0x28e)+_0x1a48c5[_0x5e05fd(0x2e3)]+'\x27:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20type:\x20\x27'+_0x1a48c5[_0x5e05fd(0x1e3)]+_0x5e05fd(0x1fd)+_0xb92be1+'\x0a\x20\x20\x20\x20\x20\x20}';})['join'](',\x0a');return'\x20\x20\x20\x20//\x20Field\x20validation\x20configuration\x0a\x20\x20\x20\x20this.validationConfig\x20=\x20{\x0a'+_0x556aeb+'\x0a\x20\x20\x20\x20};\x0a';}function _generateValidateFieldConstraints(){const _0x28bb34=a0_0x18d6;return _0x28bb34(0x1bf);}function generateCompositeMethods(_0x32195a){const _0x312910=a0_0x18d6,_0x57163d={'crCCM':_0x312910(0x260),'ownui':function(_0xefc256,_0x3ab42){return _0xefc256>_0x3ab42;},'jNEVm':function(_0x3fa3c9,_0xc6684f){return _0x3fa3c9+_0xc6684f;},'YJugZ':function(_0x13a883,_0x5c7c2f){return _0x13a883>_0x5c7c2f;},'oVDjU':function(_0x4d4fac,_0x1ac83b){return _0x4d4fac===_0x1ac83b;},'cdQxS':_0x312910(0x23a)},_0x3b262e=_0x32195a['action']||{},_0x1fd550=_0x32195a[_0x312910(0x1d9)]&&_0x32195a[_0x312910(0x1d9)]['enabled'];if(!_0x1fd550||!_0x3b262e['createComposite']&&!_0x3b262e['updateComposite']&&!_0x3b262e[_0x312910(0x2bc)])return'';const _0x428694=_0x32195a['masterDetail'][_0x312910(0x1b5)],_0x2f7db2=_0x32195a[_0x312910(0x1d9)]['foreignKey'],_0x1c5d8f=_0x32195a[_0x312910(0x2c7)]||'id';let _0x1223f4='\x0a';if(_0x3b262e[_0x312910(0x238)]){const _0x4a41d7=_0x32195a['masterDetail']?.['detailConfig']?.['primaryKey']||_0x428694['split']('.')['pop']()+'_id',_0x317a83=_0x32195a['masterDetail']?.['detailConfig']?.[_0x312910(0x283)]||{},_0x274557=[],_0x510f40=[];for(const [_0x495507,_0x3d5b41]of Object['entries'](_0x317a83)){if(_0x3d5b41[_0x312910(0x1e3)]===_0x57163d['crCCM'])_0x274557['push'](_0x495507);else{const _0x316ecf=(_0x3d5b41[_0x312910(0x2a0)]||'')['split']('*')['map'](_0x2c0c0b=>_0x2c0c0b[_0x312910(0x1da)]());_0x510f40['push']({'fieldName':_0x495507,'qtyField':_0x316ecf[0x0],'priceField':_0x316ecf[0x1]});}}const _0x245ec8=_0x510f40['map'](_0x3c4310=>{const _0x351405=_0x312910;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x3c4310['fieldName']+_0x351405(0x1d4)+_0x3c4310['qtyField']+'\x20*\x20'+_0x3c4310[_0x351405(0x208)]+_0x351405(0x2ec)+_0x3c4310[_0x351405(0x2ac)]+'\x20=\x20(Number(item.'+_0x3c4310[_0x351405(0x19e)]+_0x351405(0x2dc)+_0x3c4310['priceField']+')\x20||\x200);';})['join']('\x0a');_0x1223f4+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20create\x20-\x20Create\x20header\x20with\x20detail\x20items\x20in\x20a\x20single\x20transaction\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail\x20items\x20array\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Created\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20createComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x428694['split']('.')[_0x312910(0x19c)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeInsert\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailItems\x20=\x20data[detailKey]\x20||\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeInsertBeforeContext(headerData,\x20detailItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x32195a[_0x312910(0x263)]+_0x312910(0x1be)+_0x428694+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x2f7db2+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27insert\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeInsert\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerPlaceholders.push(`$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(created_at,\x20created_by,\x20updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendCreateAuditColumns(headerFields,\x20headerValues,\x20headerPlaceholders,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerInsertQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20${this.writeSource}\x20(${headerFields.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(${headerPlaceholders.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20INSERT:\x27,\x20{\x20query:\x20headerInsertQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerInsertQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20insertedHeader\x20=\x20headerResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20const\x20masterPrimaryKeyValue\x20=\x20insertedHeader[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20inserted\x20successfully:\x20${this.primaryKey}=${masterPrimaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Insert\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x428694+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20foreignKey\x20=\x20\x27'+_0x2f7db2+_0x312910(0x2a7)+(_0x57163d['ownui'](_0x274557['length'],0x0)?'const\x20generatedFields\x20=\x20'+JSON['stringify'](_0x274557)+';':'')+_0x312910(0x2a8)+_0x4a41d7+_0x312910(0x262)+(_0x245ec8?_0x57163d[_0x312910(0x1c3)]('\x0a',_0x245ec8)+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x57163d[_0x312910(0x2d2)](_0x274557[_0x312910(0x1a3)],0x0)?_0x312910(0x24c):'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholders.push(`$${detailPlaceholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholderIndex\x20=\x20this._appendCreateAuditColumns(detailFields,\x20detailValues,\x20detailPlaceholders,\x20item,\x20eventContext,\x20detailPlaceholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailInsertQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20${detailTableName}\x20(${detailFields.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(${detailPlaceholders.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20detail\x20INSERT:\x27,\x20{\x20query:\x20detailInsertQuery,\x20values:\x20detailValues\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20client.query(detailInsertQuery,\x20detailValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20insertedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Inserted\x20${insertedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeInsert\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterCtx\x20=\x20CB.buildCompositeInsertAfterContext(headerData,\x20insertedHeader,\x20insertedItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x32195a[_0x312910(0x263)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x428694+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x2f7db2+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterResult\x20=\x20await\x20ce.executeOnAfterComposite(\x27insert\x27,\x20afterCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onAfterCompositeInsert\x20failed:\x20${afterResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20...insertedHeader,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20insertedItems\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20createComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}if(_0x3b262e['updateComposite']){const _0x1b80d6=_0x32195a[_0x312910(0x1d9)]?.[_0x312910(0x267)]?.[_0x312910(0x2c7)]||_0x428694['split']('.')[_0x312910(0x19c)]()+_0x312910(0x251),_0x582771=_0x32195a['masterDetail']?.['headerCalculations']||null,_0x14d1aa=_0x32195a[_0x312910(0x1d9)]?.['detailConfig']?.['autoCalculateFields']||{},_0x2d847a=[],_0x3d0e16=[];for(const [_0x3eda8b,_0xe9d824]of Object['entries'](_0x14d1aa)){if(_0x57163d['oVDjU'](_0xe9d824[_0x312910(0x1e3)],_0x312910(0x260)))_0x2d847a['push'](_0x3eda8b);else{const _0x30c4c5=(_0xe9d824[_0x312910(0x2a0)]||'')['split']('*')[_0x312910(0x2fd)](_0x2e8ddf=>_0x2e8ddf[_0x312910(0x1da)]());_0x3d0e16['push']({'fieldName':_0x3eda8b,'qtyField':_0x30c4c5[0x0],'priceField':_0x30c4c5[0x1]});}}const _0x13f103=_0x3d0e16[_0x312910(0x2fd)](_0x130de9=>{const _0x297180=_0x312910;return _0x297180(0x1f2)+_0x130de9[_0x297180(0x2ac)]+'\x20=\x20'+_0x130de9[_0x297180(0x19e)]+'\x20*\x20'+_0x130de9['priceField']+_0x297180(0x2ec)+_0x130de9['fieldName']+_0x297180(0x1db)+_0x130de9['qtyField']+_0x297180(0x2dc)+_0x130de9[_0x297180(0x208)]+_0x297180(0x1c1);})['join']('\x0a'),_0x310304=_0x32195a['masterDetail']?.['detailConfig']?.['autoCalculateFields']?.[_0x312910(0x1b9)]?.[_0x312910(0x2a0)]||'',_0x50ec70=_0x310304['split']('*')[_0x312910(0x2fd)](_0x4bae85=>_0x4bae85['trim']()),_0x984b36=_0x32195a['masterDetail']?.['headerCalculations']?.['total_qty']?.[_0x312910(0x209)]?.[_0x312910(0x269)]('items.','')||'',_0x523e4f=_0x50ec70[0x0]||_0x984b36,_0x546b39=_0x50ec70[0x1]||_0x57163d[_0x312910(0x1f0)];_0x1223f4+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20update\x20-\x20Update\x20header\x20with\x20granular\x20detail\x20operations\x20(insert/update/delete)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail_lines\x20with\x20insert/update/delete\x20arrays\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Updated\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20updateComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20primary\x20key\x20value\x0a\x20\x20\x20\x20\x20\x20const\x20primaryKeyValue\x20=\x20data[this.primaryKey];\x0a\x20\x20\x20\x20\x20\x20if\x20(!primaryKeyValue)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Primary\x20key\x20${this.primaryKey}\x20is\x20required\x20for\x20update`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20record\x20exists\x20(also\x20serves\x20as\x20prefetch\x20oldData\x20for\x20hooks)\x0a\x20\x20\x20\x20\x20\x20const\x20checkQuery\x20=\x20`SELECT\x20*\x20FROM\x20${this.writeSource}\x20WHERE\x20${this.primaryKey}\x20=\x20$1`;\x0a\x20\x20\x20\x20\x20\x20const\x20checkResult\x20=\x20await\x20client.query(checkQuery,\x20[primaryKeyValue]);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(checkResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20oldData\x20=\x20checkResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items\x20and\x20primary\x20key)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x428694[_0x312910(0x2bf)]('.')['pop']()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20update:\x20detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x32195a['tableName']+_0x312910(0x1be)+_0x428694+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x2f7db2+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27update\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeUpdate\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(`${key}\x20=\x20$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendUpdateAuditColumns(headerFields,\x20headerValues,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20headerValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20const\x20headerUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${headerFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${placeholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20UPDATE:\x27,\x20{\x20query:\x20headerUpdateQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerUpdateQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20updatedHeader\x20=\x20headerResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20updated\x20successfully:\x20${this.primaryKey}=${primaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Process\x20detail\x20items\x20with\x20insert/update/delete\x20pattern\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x428694+_0x312910(0x313)+_0x2f7db2+_0x312910(0x27c)+_0x1b80d6+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+(_0x2d847a['length']>0x0?_0x312910(0x197)+JSON['stringify'](_0x2d847a)+';':'')+_0x312910(0x1a9)+(_0x13f103?_0x57163d[_0x312910(0x1c3)]('\x0a',_0x13f103)+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(key\x20===\x20detailPrimaryKey)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x57163d[_0x312910(0x26c)](_0x2d847a[_0x312910(0x1a3)],0x0)?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+_0x312910(0x2de)+(_0x13f103?'\x0a'+_0x13f103+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x57163d[_0x312910(0x26c)](_0x2d847a['length'],0x0)?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+_0x312910(0x22c)+(_0x582771?_0x312910(0x1ee)+JSON[_0x312910(0x25d)](_0x582771)+';\x0a\x20\x20\x20\x20\x20\x20const\x20recalculatedFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20recalculatedValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20recalcPlaceholder\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(calculations.total_items)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedFields.push(`total_items\x20=\x20$${recalcPlaceholder++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(allItems.length);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(calculations.total_qty\x20&&\x20calculations.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20calculations.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20totalQty\x20=\x20allItems.reduce((sum,\x20item)\x20=>\x20sum\x20+\x20(Number(item[qtyField])\x20||\x200),\x200);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedFields.push(`total_qty\x20=\x20$${recalcPlaceholder++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(totalQty);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20'+(_0x523e4f?_0x312910(0x20e)+_0x523e4f+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0x546b39+_0x312910(0x1d5):'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured')+'\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(recalculatedFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20recalc\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalcPlaceholder\x20=\x20this._appendUpdateAuditColumns(recalculatedFields,\x20recalculatedValues,\x20data,\x20eventContext,\x20recalcPlaceholder);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${recalculatedFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${recalcPlaceholder}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcQuery,\x20values:\x20recalculatedValues\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcResult\x20=\x20await\x20client.query(recalcQuery,\x20recalculatedValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20Object.assign(updatedHeader,\x20recalcResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20':'')+_0x312910(0x284)+_0x32195a[_0x312910(0x263)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x428694+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x2f7db2+_0x312910(0x273);}if(_0x3b262e['readComposite']){const _0x174f9a=_0x32195a[_0x312910(0x1d9)]?.[_0x312910(0x267)]?.['detailQuery']||null;let _0x5663de;_0x174f9a?_0x5663de='const\x20detailQuery\x20=\x20`'+_0x174f9a+'`;':_0x5663de='const\x20detailQuery\x20=\x20`SELECT\x20*\x20FROM\x20'+_0x428694+_0x312910(0x2e0)+_0x2f7db2+'\x20=\x20$1\x20ORDER\x20BY\x20line_number`;',_0x1223f4+=_0x312910(0x22b)+_0x428694[_0x312910(0x2bf)]('.')[_0x312910(0x19c)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+_0x5663de+'\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20header\x20of\x20headerResults)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResults\x20=\x20await\x20db.executeQuery(detailQuery,\x20[header[this.primaryKey]]);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20compositeResults.push({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...header,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20detailResults\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20compositeResults.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20compositeResults\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20readComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}return _0x1223f4;}function generateDeleteMethod(_0x3007b2){const _0x14de3c=a0_0x18d6,_0x36f56c=_0x3007b2[_0x14de3c(0x2b9)]||{},_0x5341d4=_0x3007b2['masterDetail']&&_0x3007b2['masterDetail']['enabled'],_0x3fb245=_0x3007b2[_0x14de3c(0x1d9)]?.['cascadeDelete']||![];if(!_0x36f56c[_0x14de3c(0x311)])return'';const _0x2fc020=_0x3007b2['primaryKey']||'id';if(!_0x5341d4)return'';const _0x68856=_0x3007b2['masterDetail'][_0x14de3c(0x1b5)],_0x33be1b=_0x3007b2[_0x14de3c(0x1d9)][_0x14de3c(0x305)];let _0x147380='\x0a';return _0x147380+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Delete\x20data\x20with\x20cascadeDelete\x20support\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Delete\x20options\x20with\x20where\x20clause\x0a\x20\x20\x20*\x20@param\x20{Object}\x20eventContext\x20-\x20Event\x20lifecycle\x20context\x20(optional)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Delete\x20result\x0a\x20\x20\x20*/\x0a\x20\x20async\x20deleteData(options,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20where\x20clause\x0a\x20\x20\x20\x20\x20\x20const\x20where\x20=\x20options.where\x20||\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(!where\x20||\x20where.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Where\x20clause\x20is\x20required\x20for\x20delete\x20operation\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20conditions\x20=\x20where.map(condition\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(condition.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${condition.key}\x20=\x20$${paramIndex++}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20conditions.join(\x27\x20AND\x20\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20complex\x20where\x20format\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20conditions\x20=\x20where.conditions.map(condition\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(condition.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20operator\x20=\x20condition.operator\x20||\x20\x27=\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${condition.key}\x20${operator}\x20$${paramIndex++}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20logic\x20=\x20where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20conditions.join(`\x20${logic}\x20`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(!whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20where\x20clause\x20format\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20'+(_0x3fb245?'\x0a\x20\x20\x20\x20\x20\x20//\x20cascadeDelete\x20=\x20true:\x20DELETE\x20child\x20records\x20first,\x20then\x20header\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Deleting\x20child\x20records\x20from\x20'+_0x68856+'...\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Get\x20primary\x20key\x20value\x20untuk\x20delete\x20child\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20`SELECT\x20'+_0x2fc020+_0x14de3c(0x24e)+_0x2fc020+_0x14de3c(0x2bb)+_0x68856+_0x14de3c(0x2e0)+_0x33be1b+_0x14de3c(0x1f9)+_0x68856+'`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20DELETE\x20header\x20record\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderQuery\x20=\x20`DELETE\x20FROM\x20${this.writeSource}\x20WHERE\x20${whereClause}\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderResult\x20=\x20await\x20client.query(deleteHeaderQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(deleteHeaderResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedData\x20=\x20deleteHeaderResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Header\x20record\x20deleted\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20':'\x0a\x20\x20\x20\x20\x20\x20//\x20cascadeDelete\x20=\x20false:\x20Only\x20DELETE\x20header\x20record\x0a\x20\x20\x20\x20\x20\x20//\x20Database\x20foreign\x20key\x20constraint\x20akan\x20handle\x20validasi\x20child\x20records\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Deleting\x20header\x20record\x20(cascadeDelete\x20=\x20false)...\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderQuery\x20=\x20`DELETE\x20FROM\x20${this.writeSource}\x20WHERE\x20${whereClause}\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderResult\x20=\x20await\x20client.query(deleteHeaderQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(deleteHeaderResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedData\x20=\x20deleteHeaderResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Header\x20record\x20deleted\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20')+_0x14de3c(0x2e9)+(_0x3fb245?',\x0a\x20\x20\x20\x20\x20\x20\x20\x20deletedChildRecords:\x20deleteChildResult.rowCount':'')+'\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20deleteData:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a',_0x147380;}function createPostgresModelTemplate(_0x214e18,_0x231c4d,_0x112352){const _0x1aa2f1=a0_0x18d6,_0x4524b1={'WeqcU':function(_0x3d5e4b,_0x4590b2,_0x5587d7){return _0x3d5e4b(_0x4590b2,_0x5587d7);},'bRETy':function(_0x16d8fe,_0x248355){return _0x16d8fe(_0x248355);},'mHqIt':'datatablesQuery','RuMzj':_0x1aa2f1(0x2c6),'YlkDo':function(_0x4ec7d2,_0x1388ce){return _0x4ec7d2(_0x1388ce);}};assertNoFileReferenceLeftover(_0x112352);const _0x1cd357=FileUtils['toPascalCase'](_0x231c4d),_0x401672=new Date()['toISOString']()['replace']('T','\x20')['replace'](/\.\d{3}Z$/,''),_0x5cfdd1=buildValidFieldsString(_0x112352),_0x30ceef=buildSearchColumnsCode(_0x112352),_0x567034=buildFiltersCode(_0x112352),_0x286eeb=_0x4524b1[_0x1aa2f1(0x1cd)](buildLookupOverrideCode,_0x231c4d,_0x112352),_0x208521=buildAdvancedQuerySection(_0x112352),_0x40f432=buildFieldMappingCode(_0x112352),_0x127eb8=buildAuditColumnsSection(_0x112352,'\x20\x20\x20\x20'),_0x902a7=_0x112352[_0x1aa2f1(0x29c)]&&_0x112352['defaultScope'][_0x1aa2f1(0x288)]?buildDefaultScopeSQL(_0x112352[_0x1aa2f1(0x29c)][_0x1aa2f1(0x288)],''):'',_0x4a2320=_0x112352[_0x1aa2f1(0x1b3)]||_0x112352['tableName'],_0x39e19c=_0x112352[_0x1aa2f1(0x263)];return'const\x20BaseModel\x20=\x20require(\x27@restforgejs/platform/src/models/base-model\x27);\x0aconst\x20db\x20=\x20require(\x27@restforgejs/platform/src/utils/db\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0a//\x20AdvancedFilterHelper\x20dihapus\x20—\x20semua\x20filtering\x20ditangani\x20oleh\x20buildObjectFilterClause\x20dan\x20buildComplexWhereClause\x0a\x0a/**\x0a\x20*\x20'+_0x1cd357+_0x1aa2f1(0x21b)+_0x401672+'\x0a\x20*\x0a\x20*\x20Model\x20untuk\x20'+_0x231c4d+'\x20yang\x20mewarisi\x20fungsi-fungsi\x20dari\x20BaseModel\x0a\x20*\x20Table:\x20'+_0x112352['tableName']+(_0x112352['viewName']?'\x0a\x20*\x20View:\x20'+_0x112352['viewName']:'')+_0x1aa2f1(0x27b)+(_0x112352[_0x1aa2f1(0x2ac)]?_0x112352[_0x1aa2f1(0x2ac)]['length']:0x0)+_0x1aa2f1(0x2ed)+_0x1cd357+'Model\x20extends\x20BaseModel\x20{\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Constructor\x0a\x20\x20\x20*/\x0a\x20\x20constructor()\x20{\x0a\x20\x20\x20\x20//\x20Definisikan\x20validFields\x20-\x20semua\x20field\x20yang\x20valid\x20untuk\x20tabel\x20'+_0x231c4d+'\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x5cfdd1+_0x1aa2f1(0x2f0)+(_0x112352['datatablesWhere']?JSON['stringify'](_0x112352[_0x1aa2f1(0x23c)]):'[\x27name\x27,\x20\x27nama\x27,\x20\x27code\x27,\x20\x27kode\x27,\x20\x27all\x27]')+_0x1aa2f1(0x1a6)+_0x112352[_0x1aa2f1(0x263)]+'\x27,\x20validFields,\x20datatablesWhere);\x0a\x0a\x20\x20\x20\x20//\x20Setup\x20primary\x20key\x20dari\x20payload\x20atau\x20fallback\x20ke\x20fieldName\x20pertama\x0a\x20\x20\x20\x20this.primaryKey\x20=\x20\x27'+(_0x112352[_0x1aa2f1(0x2c7)]||_0x112352['fieldName']&&_0x112352['fieldName'][0x0]||'id')+_0x1aa2f1(0x1ad)+_0x4a2320+_0x1aa2f1(0x250)+_0x4a2320+_0x1aa2f1(0x220)+_0x39e19c+'\x27;\x20//\x20Source\x20untuk\x20operasi\x20write\x20(add,\x20update,\x20delete)\x0a'+_0x127eb8+_0x1aa2f1(0x1c7)+!!_0x112352[_0x1aa2f1(0x2c6)]+_0x1aa2f1(0x1bd)+!!_0x112352['exportQuery']+';\x0a\x0a\x20\x20\x20\x20//\x20Load\x20advanced\x20query\x20templates\x0a\x20\x20\x20\x20this.advancedQueryTemplates\x20=\x20this.loadAdvancedQueryTemplates();\x0a\x20\x20\x20\x20'+(_0x112352['dateTimeFields']&&Object['keys'](_0x112352[_0x1aa2f1(0x2e8)])['length']>0x0?'\x0a\x20\x20\x20\x20//\x20DateTime\x20fields\x20configuration\x0a\x20\x20\x20\x20this.dateTimeFields\x20=\x20'+JSON[_0x1aa2f1(0x25d)](_0x112352['dateTimeFields'],null,0x6)+_0x1aa2f1(0x239):'')+(_0x112352['uploadConfig']&&_0x112352['uploadConfig']['fields']?_0x1aa2f1(0x1d1)+JSON['stringify'](Object['keys'](_0x112352['uploadConfig']['fields']))+_0x1aa2f1(0x239):'')+'\x0a'+_0x4524b1['bRETy'](_generateValidationConfig,_0x112352['fieldValidation'])+'\x0a\x20\x20\x20\x20//\x20Model\x20metadata\x0a\x20\x20\x20\x20this.modelMetadata\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20endpointName:\x20\x27'+_0x231c4d+'\x27,\x0a\x20\x20\x20\x20\x20\x20moduleName:\x20\x27'+_0x214e18+_0x1aa2f1(0x27f)+_0x112352[_0x1aa2f1(0x263)]+_0x1aa2f1(0x2f6)+_0x4a2320+'\x27,\x0a\x20\x20\x20\x20\x20\x20fieldCount:\x20'+(_0x112352[_0x1aa2f1(0x2ac)]?_0x112352[_0x1aa2f1(0x2ac)]['length']:0x0)+_0x1aa2f1(0x2ef)+_0x401672+_0x1aa2f1(0x2b6)+JSON['stringify'](_0x112352[_0x1aa2f1(0x210)]?.[_0x1aa2f1(0x2f9)]||[])+_0x1aa2f1(0x1e8)+_0x208521+'\x0a\x0a\x20\x20\x20\x20return\x20templates;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getListQuery\x20untuk\x20menyesuaikan\x20dengan\x20kebutuhan\x20'+_0x231c4d+_0x1aa2f1(0x2ae)+_0x231c4d+'\x0a\x20\x20\x20*/\x0a\x20\x20getListQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Load\x20query\x20dasar\x20dengan\x20placeholder\x20replacement\x0a\x20\x20\x20\x20'+buildQueryLoadingCode(_0x112352['datatablesQuery'],_0x4524b1['mHqIt'])+_0x1aa2f1(0x1c8)+(_0x112352['viewQuery']?_0x1aa2f1(0x308)+_0x4524b1['WeqcU'](buildQueryLoadingCode,_0x112352['viewQuery'],_0x4524b1['RuMzj'])+_0x1aa2f1(0x286):_0x1aa2f1(0x2b5))+_0x1aa2f1(0x244)+(_0x902a7?'WHERE\x20'+_0x902a7:'')+_0x1aa2f1(0x248)+(_0x902a7?'whereClause\x20+=\x20`\x20AND\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;':_0x1aa2f1(0x29b))+_0x1aa2f1(0x1f8)+_0x30ceef+'\x0a\x0a'+_0x567034+'\x0a\x0a'+_0x286eeb+'\x0a\x0a'+_0x40f432+'\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20formatResponseData\x20untuk\x20'+_0x231c4d+'\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20dari\x20database\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Data\x20yang\x20sudah\x20diformat\x20untuk\x20response\x20'+_0x231c4d+'\x0a\x20\x20\x20*/\x0a\x20\x20formatResponseData(data)\x20{\x0a\x20\x20\x20\x20//\x20Gunakan\x20parent\x20method\x20yang\x20sudah\x20include\x20datetime\x20formatting\x0a\x20\x20\x20\x20return\x20super.formatResponseData(data);\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Execute\x20advanced\x20query\x20berdasarkan\x20nama\x0a\x20\x20\x20*\x20@param\x20{string}\x20queryName\x20-\x20Nama\x20query\x20dari\x20advancedQueryTemplates\x0a\x20\x20\x20*\x20@param\x20{Object}\x20params\x20-\x20Parameter\x20untuk\x20query\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Hasil\x20query\x0a\x20\x20\x20*/\x0a\x20\x20async\x20executeAdvancedQuery(queryName,\x20params\x20=\x20{})\x20{\x0a\x20\x20\x20\x20if\x20(!this.advancedQueryTemplates[queryName])\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Advanced\x20query\x20\x27${queryName}\x27\x20not\x20found.\x20Available\x20queries:\x20${Object.keys(this.advancedQueryTemplates).join(\x27,\x20\x27)}`);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20let\x20query\x20=\x20this.advancedQueryTemplates[queryName];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Replace\x20placeholders\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20query.replace(/${tableName}/g,\x20this.table);\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20query.replace(/${this.table}/g,\x20this.table);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Replace\x20parameter\x20placeholders\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(params))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20placeholder\x20=\x20new\x20RegExp(`\x5c$\x5c{params\x5c\x5c.${key}\x5c}`,\x20\x27g\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20=\x20query.replace(placeholder,\x20value);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Executing\x20advanced\x20query\x20\x27${queryName}\x27:\x20${query}`);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20await\x20db.executeQuery(query);\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20executing\x20advanced\x20query\x20\x27${queryName}\x27:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20data\x20before\x20insert/update\x20operations\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20yang\x20akan\x20divalidasi\x0a\x20\x20\x20*\x20@param\x20{string}\x20operation\x20-\x20Operasi\x20(insert/update)\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Validation\x20result\x0a\x20\x20\x20*/\x0a\x20\x20async\x20validateData(data,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20isValid:\x20true,\x0a\x20\x20\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitizedData:\x20{}\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20we\x20have\x20fieldValidation\x20config\x0a\x20\x20\x20\x20\x20\x20const\x20hasFieldValidation\x20=\x20this.validationConfig\x20&&\x20Object.keys(this.validationConfig).length\x20>\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(hasFieldValidation)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Loop\x20semua\x20field\x20yang\x20ada\x20di\x20validationConfig\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20value\x20=\x20data[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20value\x20jika\x20autoGenerate\x20dan\x20nilai\x20kosong.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20dan\x20uuid\x20diperlakukan\x20sama:\x20UUID\x20v7\x20via\x20uuid\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20lintas\x20dialect;\x20cocok\x20dengan\x20konvensi\x20payload\x20category.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20yang\x20memakai\x20type:\x20\x22string\x22\x20dengan\x20constraint\x20autoGenerate\x20+\x20primaryKey).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20constraints.autoGenerate\x20&&\x20(!value\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27uuid\x27\x20||\x20config.type\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x20//\x20Update\x20data\x20asli\x20juga\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(config.type\x20===\x20\x27timestamp\x27\x20||\x20config.type\x20===\x20\x27datetime\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20new\x20Date().toISOString();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x20//\x20Update\x20data\x20asli\x20juga\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(config.type\x20===\x20\x27date\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20new\x20Date().toISOString().split(\x27T\x27)[0];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x20//\x20Update\x20data\x20asli\x20juga\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Validate\x20per-field\x20dengan\x20constraints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fieldResult\x20=\x20await\x20this.validateFieldConstraints(fieldName,\x20value,\x20operation);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Accumulate\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!fieldResult.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...fieldResult.errors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Accumulate\x20warnings\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldResult.warnings\x20&&\x20fieldResult.warnings.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.warnings.push(...fieldResult.warnings);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Set\x20sanitized\x20value\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldResult.sanitized\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20fieldResult.sanitized;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Validate\x20field\x20yang\x20tidak\x20ada\x20di\x20validationConfig\x20(backward\x20compatibility)\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validationConfig[field]\x20&&\x20data[field]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Fallback\x20ke\x20generic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20this.sanitizeFieldValue(field,\x20data[field]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Cross-field\x20validation\x20(contoh:\x20before/after\x20date)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(result.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20crossFieldResult\x20=\x20await\x20this._validateCrossFieldConstraints(result.sanitizedData,\x20operation);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!crossFieldResult.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...crossFieldResult.errors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20Tidak\x20ada\x20fieldValidation\x20-\x20gunakan\x20generic\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20data[field];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Required\x20field\x20validation\x20untuk\x20insert\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20(field\x20===\x20\x27id\x27\x20||\x20field\x20===\x20\x27name\x27\x20||\x20field\x20===\x20\x27nama\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(field\x20!==\x20\x27id\x27)\x20{\x20//\x20ID\x20bisa\x20auto-generated\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(`Field\x20\x27${field}\x27\x20is\x20required\x20for\x20${operation}\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Sanitize\x20dan\x20validate\x20value\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20this.sanitizeFieldValue(field,\x20value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Generic\x20email\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data.email\x20&&\x20!/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/.test(data.email))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(\x27Invalid\x20email\x20format\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20result.errors.push(`Validation\x20error:\x20${error.message}`);\x0a\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Sanitize\x20field\x20value\x20berdasarkan\x20tipe\x20field\x20(generic\x20fallback)\x0a\x20\x20\x20*\x20@param\x20{string}\x20fieldName\x20-\x20Nama\x20field\x0a\x20\x20\x20*\x20@param\x20{*}\x20value\x20-\x20Nilai\x20field\x0a\x20\x20\x20*\x20@returns\x20{*}\x20Sanitized\x20value\x0a\x20\x20\x20*/\x0a\x20\x20sanitizeFieldValue(fieldName,\x20value)\x20{\x0a\x20\x20\x20\x20if\x20(typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Trim\x20whitespace\x0a\x20\x20\x20\x20\x20\x20value\x20=\x20value.trim();\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Escape\x20special\x20characters\x20untuk\x20mencegah\x20injection\x0a\x20\x20\x20\x20\x20\x20value\x20=\x20value.replace(/[<>]/g,\x20\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Truncate\x20jika\x20terlalu\x20panjang\x0a\x20\x20\x20\x20\x20\x20if\x20(value.length\x20>\x20255)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20value.substring(0,\x20255);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20value;\x0a\x20\x20}\x0a'+_generateValidateFieldConstraints()+_0x1aa2f1(0x291)+_0x4524b1['YlkDo'](generateCompositeMethods,_0x112352)+_0x4524b1[_0x1aa2f1(0x2ea)](generateDeleteMethod,_0x112352)+_0x1aa2f1(0x2a1)+_0x1cd357+_0x1aa2f1(0x2cb);}function getEnabledActions(_0x7d03a6){const _0x35b212=a0_0x18d6,_0x39400a={'DHnTp':function(_0x1e1555,_0xd510b7){return _0x1e1555!==_0xd510b7;}};if(!_0x7d03a6[_0x35b212(0x2b9)]||_0x39400a['DHnTp'](typeof _0x7d03a6['action'],_0x35b212(0x255)))return[];return Object['entries'](_0x7d03a6['action'])['filter'](([,_0x3af9f4])=>_0x3af9f4)[_0x35b212(0x2fd)](([_0x17eb5e])=>_0x17eb5e);}function buildEndpointFunctions(_0x4b0d33,_0x231d1e,_0x24b608,_0x46b74d,_0x4fb813,_0x5823dc=null,_0xdcfb3d=![]){const _0x49f67a=a0_0x18d6,_0x261ff9={'oRhYX':function(_0x3336ed,_0xb4c54){return _0x3336ed(_0xb4c54);},'YMiSt':function(_0x183ae7,_0x20c71d,_0x158955,_0x43a311,_0x8d0b50,_0x15af8f){return _0x183ae7(_0x20c71d,_0x158955,_0x43a311,_0x8d0b50,_0x15af8f);},'hsYdJ':function(_0x1259ed,_0x3711da,_0x5e0fb6,_0x1920c3,_0x2b33e9){return _0x1259ed(_0x3711da,_0x5e0fb6,_0x1920c3,_0x2b33e9);},'AoJjL':function(_0x111b98,_0x51910e,_0x885126,_0x516a4b,_0x5f5c65,_0x1a56c1){return _0x111b98(_0x51910e,_0x885126,_0x516a4b,_0x5f5c65,_0x1a56c1);},'SXdyH':function(_0x47be31,_0xf8b31f,_0x584bd0,_0x2836af,_0x134aba,_0x4c8124,_0x4366d3){return _0x47be31(_0xf8b31f,_0x584bd0,_0x2836af,_0x134aba,_0x4c8124,_0x4366d3);},'bMqtG':function(_0x41a6c2,_0xda4734,_0x1de03e,_0x4f0bf5,_0x76dbbf){return _0x41a6c2(_0xda4734,_0x1de03e,_0x4f0bf5,_0x76dbbf);},'ZmCSh':function(_0x23b665,_0x3d5e66){return _0x23b665===_0x3d5e66;}},_0x154cf1=_0x24b608['action']||{},_0x30c03b=_0x261ff9[_0x49f67a(0x2be)](getEnabledActions,_0x24b608);let _0x424229='';if(!_0x5823dc){const _0x5b914f=FileUtils['toCamelCase'](_0x231d1e);_0x5823dc=_0x5b914f+_0x49f67a(0x2d5);}return _0x154cf1['datatables']&&(_0x424229+=generateDatatablesFunction(_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x154cf1[_0x49f67a(0x2c2)]&&(_0x424229+=_0x261ff9[_0x49f67a(0x25c)](generateCreateFunction,_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc,_0xdcfb3d)),_0x154cf1[_0x49f67a(0x1e5)]&&(_0x424229+=generateUpdateFunction(_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc,_0xdcfb3d)),_0x154cf1[_0x49f67a(0x2b7)]&&(_0x424229+=_0x261ff9[_0x49f67a(0x2ad)](generateAdjustFunction,_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x154cf1[_0x49f67a(0x266)]&&(_0x424229+=generateAggregateFunction(_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x154cf1['delete']&&(_0x424229+=_0x261ff9['AoJjL'](generateDeleteFunction,_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc,_0xdcfb3d)),_0x154cf1['first']&&(_0x424229+=_0x261ff9[_0x49f67a(0x1d8)](generateFirstFunction,_0x4b0d33,_0x231d1e,_0x24b608,_0x46b74d,_0x4fb813,_0x5823dc)),_0x154cf1['lookup']&&(_0x424229+=generateLookupFunction(_0x4b0d33,_0x231d1e,_0x24b608,_0x46b74d,_0x4fb813,_0x5823dc)),_0x154cf1['read']&&(_0x424229+=generateReadFunction(_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x154cf1[_0x49f67a(0x238)]&&(_0x424229+=generateCreateCompositeFunction(_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x154cf1[_0x49f67a(0x1d7)]&&(_0x424229+=_0x261ff9[_0x49f67a(0x2ad)](generateUpdateCompositeFunction,_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x154cf1['readComposite']&&(_0x424229+=_0x261ff9[_0x49f67a(0x2ad)](generateReadCompositeFunction,_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x154cf1['workflow']&&(_0x424229+=_0x261ff9[_0x49f67a(0x2ff)](generateWorkflowFunction,_0x4b0d33,_0x231d1e,_0x24b608,_0x5823dc)),_0x261ff9['ZmCSh'](_0x30c03b[_0x49f67a(0x1a3)],0x0)&&(_0x424229+='\x0a//\x20No\x20actions\x20enabled\x20for\x20this\x20endpoint\x0a//\x20Enable\x20actions\x20in\x20payload\x20to\x20generate\x20endpoints'),_0x424229;}function generateDatatablesFunction(_0x5aaa57,_0x5be53d,_0x2fb6c3,_0x57cde7=null){const _0x331985=a0_0x18d6;if(!_0x57cde7){const _0x59d878=FileUtils['toCamelCase'](_0x5be53d);_0x57cde7=_0x59d878+_0x331985(0x2d5);}return _0x331985(0x1e0)+_0x5aaa57+'/'+_0x5be53d+_0x331985(0x1b2)+_0x5be53d+_0x331985(0x24b)+_0x57cde7+_0x331985(0x1d0)+_0x5be53d+_0x331985(0x229)+_0x5be53d+'\x20datatables:\x27,\x20error);\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x5be53d+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateCreateFunction(_0x3e4de3,_0x51479c,_0x4c1f9f,_0x10d3ba=null,_0x30376d=![]){const _0x2ae034=a0_0x18d6;if(!_0x10d3ba){const _0x453978=FileUtils['toCamelCase'](_0x51479c);_0x10d3ba=_0x453978+'Model';}const _0x22376a=_0x30376d?_0x2ae034(0x1a1)+_0x3e4de3+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x51479c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x4c1f9f['primaryKey']||'id')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4c1f9f['tableName']+_0x2ae034(0x205):'',_0x411be4=_0x30376d?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return _0x2ae034(0x1e0)+_0x3e4de3+'/'+_0x51479c+'/create\x20-\x20Menambahkan\x20data\x20'+_0x51479c+_0x2ae034(0x31b)+_0x51479c+'/create:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x411be4+'\x0a\x20\x20\x20\x20//\x20Validasi\x20data\x20dengan\x20model\x20jika\x20tersedia\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x10d3ba+_0x2ae034(0x1d3)+_0x10d3ba+_0x2ae034(0x237)+_0x4c1f9f['tableName']+_0x2ae034(0x303)+_0x10d3ba+_0x2ae034(0x30c)+_0x10d3ba+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x51479c+_0x2ae034(0x21c)+(_0x4c1f9f['primaryKey']||'id')+'\x20||\x20\x27new\x20record\x27}`);\x0a'+_0x22376a+_0x2ae034(0x28c)+_0x51479c+'\x20data\x20successfully\x20added\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menambahkan\x20data\x20'+_0x51479c+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x20//\x20PostgreSQL\x20unique\x20violation\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x20//\x20PostgreSQL\x20foreign\x20key\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adding\x20'+_0x51479c+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateUpdateFunction(_0x4ce831,_0x5e2736,_0x555dd5,_0x3f17fe=null,_0x3100be=![]){const _0x33ae63=a0_0x18d6;if(!_0x3f17fe){const _0x5cdcc3=FileUtils[_0x33ae63(0x2df)](_0x5e2736);_0x3f17fe=_0x5cdcc3+_0x33ae63(0x2d5);}const _0x538bde=_0x555dd5[_0x33ae63(0x1b4)]?',\x20'+JSON['stringify'](_0x555dd5['fieldPolicy']):'',_0x37a0ce=_0x555dd5[_0x33ae63(0x2fb)]?_0x33ae63(0x30a)+_0x3f17fe+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x5e2736+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x5e5219=_0x3100be?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20UPDATE\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabledUpdate\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabledUpdate\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.update)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishUpdate(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x4ce831+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x5e2736+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x555dd5['primaryKey']||'id')+_0x33ae63(0x314)+_0x555dd5[_0x33ae63(0x263)]+_0x33ae63(0x205):'',_0x4d3e08=_0x3100be?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return _0x33ae63(0x1e0)+_0x4ce831+'/'+_0x5e2736+'/update\x20-\x20Mengupdate\x20data\x20'+_0x5e2736+'\x0arouter.post(\x27/update\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x5e2736+_0x33ae63(0x2cc)+_0x4d3e08+_0x33ae63(0x1c5)+(_0x555dd5['primaryKey']||'id')+_0x33ae63(0x2b8)+_0x37a0ce+_0x33ae63(0x1b7)+_0x3f17fe+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x3f17fe+'.validateData(req.body,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20sanitized\x20data\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Event\x20lifecycle\x20variables\x0a\x20\x20\x20\x20let\x20oldData\x20=\x20null;\x0a\x20\x20\x20\x20let\x20newData\x20=\x20null;\x0a\x20\x20\x20\x20const\x20requestData\x20=\x20req.body;\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20oldData\x20fetch\x20+\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x555dd5[_0x33ae63(0x263)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x3f17fe+'.updateData(req.body,\x20eventContext'+_0x538bde+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x3f17fe+'.updateData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20}'+_0x538bde+_0x33ae63(0x21d)+_0x5e2736+'\x20data\x20updated\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a'+_0x5e5219+_0x33ae63(0x212)+_0x5e2736+'\x20data\x20successfully\x20updated\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengupdate\x20data\x20'+_0x5e2736+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20khusus\x20untuk\x20error\x20\x22Data\x20tidak\x20ditemukan\x22\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x5e2736+_0x33ae63(0x306)+_0x5e2736+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function a0_0x1b19(){const _0x56f4cc=['oWOkicaGic8VifzHBgLKyxnPihbYAw1HCNKGA2v5cIaGicbPzIaOiwrHDgeU','icaGic8ViezHBgXIywnRoIbNDw5HA2fUihjLywrtB3vYy2uGBgfUz3n1BMCGkhnLBxvHigTVBg9TihrLCNnLzgLHkqOGicaGCMv0DxjUicDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7','jYWkicaGicaGzMvHDhvYzxm6ia','ywrQDxn0','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YihvWzgf0zwaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','ywn0Aw9U','jYWkicaGicaGicaGihvWDgLTztOGChjVy2vZCY51ChrPBwuOksWkicaGicaGicaGig1LBw9YEtOGChjVy2vZCY5Tzw1VCNLvC2fNzsGPlaOGicaGicaGicaGC3LZDgvToIb7cIaGicaGicaGicaGihbSyxrMB3jToIbWCM9JzxnZlNbSyxrMB3jTlaOGicaGicaGicaGicbUB2rLvMvYC2LVBJOGChjVy2vZCY52zxjZAw9UlaOGicaGicaGicaGicbWAwq6ihbYB2nLC3mUCgLKcIaGicaGicaGicb9cIaGicaGicaGFtSkcIaGicaGicaGCMvZlMPZB24OAgvHBhrOsw5MBYK7cIaGicaGih0PoWOkicaGicaGlY8Gtw9KDwXLlxnWzwnPzMLJigHLywX0AcbJAgvJAYbLBMrWB2LUDcaOzgvUz2fUihbYzwzPEcbTB2r1BguPcIaGicaGigfWCc5NzxqOjY9HCgKV','j107cGOGicaGicaVlYberuXfveuGy2HPBgqGCMvJB3jKCYbTzw5Nz3vUywTHBIbMB3jLAwDUs2v5cIaGicaGignVBNn0igrLBgv0zunOAwXKuxvLCNKGpsbGrevmrvrfiezst00G','CMvHzenVBxbVC2L0zq','jYWkicaGicaGicaGigrVy3vTzw50yxrPB246icDtzwuGAw5KAxzPzhvHBcbLBMrWB2LUDcbKB2n1BwvUDgf0Aw9UjYWkicaGicaGicaGigDLBMvYyxrLzdOGjW','B1jOwvG','C3bSAxq','odCYEKvqz1b4','igXPC3qGzgf0ysCScIaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0kFsK7cGO','y3jLyxrL','mtmZmtKZnfLJywPqCq','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicaVlYbfEhrYywn0igHLywrLCIbKyxrHihnHAMeGkgv4y2X1zguGzgv0ywLSksb1BNr1AYb2ywXPzgf0Aw9UcIaGicaGignVBNn0igHLywrLCKrHDgfgB3jwywXPzgf0Aw9Uid0GEYaUlI5KyxrHih07cIaGicaGia','l2HLywX0AgaScIaGicaGicaGicbZzxj2AwnLsw5MBZOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9l2fWAs8','DMLLD1f1zxj5','ChjPBwfYEuTLEq','jZSkicaGicaGy29UC3qGCgX1z2LUugf0Aca9ihbHDgGUAM9PBIHFx2rPCM5HBwuSicCUlICSicDWBhvNAw5ZjYWGycr7Bw9KDwXLtMfTzx0TCgX1z2LUlMPZycK7cIaGicaGigXLDcbWBhvNAw4GpsbUDwXSoWOGicaGicbPzIaOzNmUzxHPC3rZu3LUyYHWBhvNAw5qyxrOksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbWBhvNAw4GpsbYzxf1AxjLkhbSDwDPBLbHDgGPoWOGicaGicaGicaGAwyGkhbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqPihSkicaGicaGicaGicaGCgX1z2LUlM9UqMvMB3jLrw5KCg9PBNrZtg9HzcHHChaSignVBMzPzYK7cIaGicaGicaGicb9cIaGicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNCgX1z2LUx2XVywrLzcCSihbSDwDPBJOGycr7Bw9KDwXLtMfTzx0TCgX1z2LUycb9lcbGugX1z2LUigXVywrLzdOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGicb9ignHDgnOicHWBhvNAw5fCNjVCIKGEWOGicaGicaGicaGBg9Nz2vYlMvYCM9YkhSGzxzLBNq6icDWBhvNAw5FBg9Hzf9LCNjVCICSigvYCM9YoIbWBhvNAw5fCNjVCI5TzxnZywDLih0SigbgywLSzwqGDg8GBg9HzcbWBhvNAw46icr7Bw9KDwXLtMfTzx0TCgX1z2LUlMPZycK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbhBg9IywWGAgvHBhrOignOzwnRigvUzhbVAw50icH0yw5WysbWCMvMAxGGBw9KDwXLkqOGicaGicbHChaUz2v0kcCVAgvHBhrOjYWGkhjLCsWGCMvZksa9pIb7cIaGicaGicaGy29UC3qGAgvHBhrOsw5MBYa9ihSkicaGicaGicaGihn0yxr1CZOGj29RjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPlNjLCgXHy2uOj1qNlcaNicCPlNjLCgXHy2uOl1WUxgr7m31Ajc8SicCNksWkicaGicaGicaGihnLCNzPy2u6icC','oIaKE3jLC3vSDc5JB21WB25LBNrZtg9HzgvKFsbJB21WB25LBNrZycK7cIaGicaGih0kicaGih0PlMnHDgnOkgvYCIa9pIb7cIaGicaGignVBNnVBguUzxjYB3iOyezHAwXLzcb0BYbSB2fKignVBxbVBMvUDcbJB25MAwD1CMf0Aw9UigzVCIa','q1HVz2i','tw9KzwWOktS','l3vWzgf0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihbHEwXVywqkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqO','lNjLywrdB21WB3nPDguOCMvXlMjVzhKPoWOkicaGignVBNnVBguUBg9Nkga','cIaGicaGicaGFtSkcIaGicaGicaGAwyGkgL0zw0U','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjvbVCNrHBcuIih0ScIaGicaGicaGicaGicaGicb7icjRzxKIoIaI','igrHDgeGzgvSzxrLzcbZDwnJzxnZzNvSBhLGktSk','igzPzwXKCWOGkIbeyxrHyMfZztOGug9ZDgDYzvnrtaOGkI8kcI8VienpuLmGzgL0yw5Nyw5PigrPigXLDMvSigfWCcbVBgvOignVCNmGBwLKzgXLD2fYzsaOBgLOyxqGA29UzMLNDxjHC2KGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkcGOklY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbWyxLSB2fKihbHzgeGBwv0B2rLifbpu1qkCM91DgvYlNvZzsGOCMvXlcbYzxmSig5LEhqPid0+ihSkicbPzIaOCMvXlM1LDgHVzca9pt0Gj1bpu1qNksb7cIaGicb0CNKGEWOGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGAw1WB3j0ihjVDxrLCYaOBwvUz2D1BMfRyw4GBxvSDgLWyxj0l2zVCM0Tzgf0ysWGyNvRyw4GsLnptIKkicaGicaGAwyGkhjLCs5WyxrOlNn0yxj0C1DPDgGOjY9PBxbVCNqTjYKPihSkicaGicaGicbYzxr1CM4GBMv4DcGPoWOGicaGicb9cGOGicaGicaVlYbwywXPzgfZAsb1BxvTihvUDhvRihbHEwXVywqkicaGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDnAxnZAw5NihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPlaOGicaGicaGicaGzw5KCg9PBNq6icCVyxbPlW','wuP1z1O','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzYWGzxzLBNrdB250zxH0','cIaGicbPzIaOixjLCs5IB2r5lNDOzxjLksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcbYzxf1zxn0igzVCM1HDdOGD2HLCMuGCgfYyw1LDgvYigLZihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIbBEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih1DcIaGicaGicaGFsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbMB3jTyxqGD2HLCMukicaGigLMicGHqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKGjIyGixjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ifSkicaGicaGicaGicaGEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicaGif0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8Vid09psbfvKvovcbmsuzfq1Ldteu6ig9UqMvMB3jLierftevursa9pt0kicaGigXLDcbVBgreyxrHid0GBNvSBdSkicaGigXLDcbUzxDeyxrHid0GBNvSBdSkicaGignVBNn0ihjLCxvLC3reyxrHid0GCMvXlMjVzhK7cIaGicbSzxqGCMvZCg9UC2veyxrHid0GBNvSBdSkcIaGicaVlYbdzwSGyxbHA2fOigrHDgeGzxHPC3qGC2vIzwX1BsbKzwXLDguGzgfUigfTyMLSig9SzcbKyxrHihvUDhvRigv2zw50igXPzMvJEwnSzqOGicaGlY8GtwvUz2D1BMfRyw4Gu0vmrunuicOGzgfYAsb0ywjLBcb1DgfTysaODgfUCgeGzxHWBgLJAxqGC2vSzwn0ksbRyxjLBMeGzMLLBgroyw1LcIaGicaVlYbIAxnHig1LBMDHBMr1BMCGA29SB20GzgfYAsbkt0LoicHTAxmUignPDhLFBMfTzsKGEwfUzYb0AwrHAYbHzgeGzgKGDgfIzwWGDxrHBwekicaGigLMicHYzxeUyM9KEs53AgvYzsaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIbYzxeUyM9KEs53AgvYzs5Szw5NDgGGpIaWksb7cIaGicaGignVBNn0igzPCNn0q29UzgL0Aw9Uid0GCMvXlMjVzhKUD2HLCMvBmf07cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxHPC3rPBMDeyxrHid0GyxDHAxqG','tw9KzwW','lNjLzhvJzsGOC3vTlcbPDgvTksa9pIb7cIaGicaGicaGy29UC3qGCxr5id0GtNvTyMvYkgL0zw0U','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','ydSkcIaGicaGic8ViejHBMD1BIbxsevsrsbJBgf1C2uGAMLRysbHzgeGzgfUihrPzgfRigTVC29UzWOGicaGicbPzIaOkg9WDgLVBNmUD2HLCMuGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLksaMjIbVChrPB25ZlNDOzxjLlMXLBMD0Aca+idaPihX8cIaGicaGicaGicaOB3b0Aw9UCY53AgvYzsaMjIbVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmPicyMig9WDgLVBNmUD2HLCMuUy29UzgL0Aw9UCY5Szw5NDgGGpIaWksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbJB25ZDcb3AgvYzvjLC3vSDca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOB3b0Aw9UCY53AgvYzsWGCgfYyw1ZlcbWyxjHBuLUzgv4ktSkicaGicaGicaGihf1zxj5icS9iga','ie9srevsiejzigeU','C2XPy2u','cGOVlYbdB21WB25LBNqGrw5NAw5LihvUDhvRigv2zw50igXPzMvJEwnSzsaOB3b0Aw9UywWPcMXLDcbJB21WB25LBNrfBMDPBMuGpsbUDwXSoWPSzxqGq29UDgv4Dej1AwXKzxiGpsbUDwXSoWP0CNKGEWOGic8VieHHBNLHigXVywqGy29TCg9Uzw50igvUz2LUzsbQAwTHihbHEwXVywqGBwvTAwXPA2KGy29TCg9Uzw50CWOGignVBNn0igHHC0nVBxbVBMvUDhmGpsa','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','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','Dg9dyw1LBenHC2u','ifDirvjfia','icHHDg9TAwmGAw5JCMvTzw50l2rLy3jLBwvUDcKkCM91DgvYlNbVC3qOjY9HzgP1C3qNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GvMfSAwrHC2KGCgf5Bg9HzaOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGChjPBwfYEsbRzxKkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','iJOG','BMfTzq','ksb7cIaGicaGigLMicH0ExbLB2yGzgf0ys4','oWOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','lMrLBgv0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDierftevursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDierftevursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','laOGicaGicbJB2X1Bw5gB3jTyxrZoIa','zgf0zvrPBwvgAwvSzhm','cGOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj0nptu1jvcCPoWOkicaGicaGlY8Gsw52ywXPzgf0zsbJywnOzsbZzxrLBgfOihDYAxrLig9WzxjHDgLVBIbIzxjOyxnPBaOGicaGicbHD2fPDcb0AgLZlMLUDMfSAwrHDgvdywnOzsGPoWOkicaGicaGCMv0DxjUihSkicaGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicaGig1LC3nHz2u6icDeyxrHihn1y2nLC3nMDwXSEsbKzwXLDgvKjYWkicaGicaGicbKyxrHoIbKzwXLDgvKrgf0yq','yLjfvhK','nNrWtvbTEa','cIaGicaGicaGAxrLBs4','igzPzwXKCWOGkIbeyxrHyMfZztOGug9ZDgDYzvnrtaOGkI8ky2XHC3mG','lMDLDfn0yxrPy0XVB2T1CerHDgeOC2vSzwn0zwruywCPoWOkicaGicaGicbJB25ZB2XLlMXVzYHGu3rHDgLJigXVB2T1CcbYzxn1BhrZoIaKE2XPC3qUBgvUz3rOFsbYzwnVCMrZigzVDw5KycK7cIaGicaGicaGCMv0DxjUihjLCY5QC29UkhSkicaGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGicbJB3vUDdOGBgLZDc5Szw5NDgGScIaGicaGicaGicbKyxrHoIbSAxn0laOGicaGicaGicaGC2vSzwn0zwruywC6ihnLBgvJDgvKvgfNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqOkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGAw4G','laOGicaGicbKyxrHyMfZzvr5Cgu6icDWB3n0z3jLCYCScIaGicaGigDLBMvYyxrLzdOGjW','cIaGicbDoWOkicaGic8VierLzMLUAxnPA2fUigrHDgf0ywjSzxnxAgvYzsbZzxn1ywKGCgf5Bg9HzaOGicaGy29UC3qGzgf0yxrHyMXLC1DOzxjLid0G','zMLUza','oWOGicaGicbPzIaOB3bLCMf0Aw9UCY5PBNnLCNqGjIyGiufYCMf5lMLZqxjYyxKOB3bLCMf0Aw9UCY5PBNnLCNqPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj1bYB3bLCNr5ici','yMrMv3i','zMLLBgrwywXPzgf0Aw9U','ChvZAa','jYWkicaGicaGDMLLD05HBwu6icC','AgvHzgvYq2fSy3vSyxrPB25Z','iJOGwWOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmsWGiMzPzwXKiJOGiNzHBhvLiIb9laOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmIWGiMzPzwXKiJOGiNzHBhvLiIb9cIaGicaGicaGicaGif0kicaGicaGicaGih0kicaGicaGicb9','zMvHDhvYzxm','ktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbJB21WBgv0zwqGC3vJy2vZC2z1BgX5ihDPDgGGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0GzwXZzsb7cIaGicaGic8ViezHBgXIywnRoIb0yw5WysbLDMvUDhmkicaGicaGDhj5ihSkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','CMvXDwvZDfnJB3bL','lMDLDe1VzgvSsw5MBYHHy3rPB25ZktSkcIaGicbYzxmUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGigvUzhbVAw50oIaN','BwfW','ie1VzhvSzsaTief1Dg8Tz2vUzxjHDgvKig9Uia','yK1XDeC','oWOGicaGicbJB25ZDcbKzwzHDwX0u2vSzwn0id0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0cIaGicaGicaGpYbBiMLKiIWGBg9VA3vWq29UzMLNlNrLEhrgAwvSzf0kicaGicaGica6ifSIAwqIlcaI','oWOGicaGBgv0ihnLBgvJDca9ig51BgW7cIaGicbPzIaOCMvXlMjVzhKUC2vSzwn0icyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUC2vSzwn0ksKGEWOGicaGicbJB25ZDcbPBNzHBgLKrMLLBgrZid0GCMvXlMjVzhKUC2vSzwn0lMzPBhrLCIHMAwvSzca9pIaHDMfSAwrgAwvSzhmUAw5JBhvKzxmOzMLLBgqPktSkicaGicaGAwyGkgLUDMfSAwrgAwvSzhmUBgvUz3rOid4GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbZzwXLy3qGzMLLBgrZjYWkicaGicaGicaGig1LC3nHz2u6igbjBNzHBgLKigzPzwXKkhmPoIaKE2LUDMfSAwrgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGDMfSAwrgAwvSzhm6ihzHBgLKrMLLBgrZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbZzwXLy3qGpsbYzxeUyM9KEs5ZzwXLy3q7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGCgfYyw1LDgvYihbHz2LUyxnPicHOyw55ysbQAwTHig1VzguGCgfNAw5HC2KPcIaGicbPzIaOCgfNAw5HDguPihSkicaGicaGAwyGkhbHz2uGpcaXksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGBwvZC2fNztOGj1zHBgLKyxrPB24GzMfPBgvKjYWkicaGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGicbWywDLoIbBj1bHz2uGBxvZDcbIzsbNCMvHDgvYihrOyw4GmcDDcIaGicaGicaGicb9cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGigLMicHWzxjqywDLidWGmsb8FcbWzxjqywDLid4GmtaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGBwvZC2fNztOGj1zHBgLKyxrPB24GzMfPBgvKjYWkicaGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGicbWzxjFCgfNztOGwYDqzxiGCgfNzsbTDxn0igjLigjLDhDLzw4GmsbHBMqGmtaWj10kicaGicaGicaGih0kicaGicaGicb9ktSkicaGicaGFqOGicaGFqOkicaGigLMicHZzwfYy2HwywX1zs5Szw5NDgGGpIaYntuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbTzxnZywDLoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGC2vHCMnOx3zHBhvLoIbBj1nLyxjJAcb2ywX1zsbTDxn0ig5VDcbLEgnLzwqGmJu1ignOyxjHy3rLCNmNxqOGicaGicaGih0kicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGA29SB20GC2vHCMnOAw5NcIaGicbPzIaOixzHBgLKrMLLBgrZlMLUy2X1zgvZkhnLyxjJAej5ksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGig1LC3nHz2u6icDwywXPzgf0Aw9UigzHAwXLzcCScIaGicaGicaGzxjYB3jZoIb7cIaGicaGicaGicbZzwfYy2HFyNK6ifTGsw52ywXPzcbZzwfYy2GGzMLLBgqUifzHBgLKigzPzwXKCZOGjhT2ywXPzezPzwXKCY5QB2LUkcCSicCPFwbDcIaGicaGicaGFqOGicaGicb9ktSkicaGih0kcIaGicaVlYbcDwLSzcbVChrPB25ZihvUDhvRig1VzgvScIaGicbJB25ZDcbVChrPB25Zid0GEWOGicaGicbZzwfYy2HwywX1ztOGC2vHCMnOvMfSDwuScIaGicaGihnLyxjJAej5oIbZzwfYy2HcEsWkicaGicaGC29YDf9JB2X1Bw5ZoIbZB3j0x2nVBhvTBNmScIaGicaGihDOzxjLoIb3AgvYzsWkicaGicaGC2vSzwn0oIbZzwXLy3qkicaGih07cGOGicaGAwyGkhbHz2LUyxrLksb7cIaGicaGig9WDgLVBNmUCgfNzsa9ihbHz2u7cIaGicaGig9WDgLVBNmUCgvYugfNzsa9ihbLCLbHz2u7cIaGicaGig9WDgLVBNmUB2zMC2v0id0GkhbHz2uGlsaXksaQihbLCLbHz2u7cIaGicb9igvSC2uGEWOGicaGicbVChrPB25ZlMXPBwL0id0GBgLTAxq7cIaGicb9cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbTzw5KyxbHDgTHBIbKyxrHigXPC3qkicaGignVBNn0ihjLC3vSDca9igf3ywL0ia','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwq','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','zM9YzwLNBKTLEq','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbiyw5KBguGC3bLy2LMAwmGzgf0ywjHC2uGzxjYB3jZcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEYaVlYbqB3n0z3jLu1fmihvUAxf1zsb2Aw9SyxrPB24kicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIK7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeDxbSAwnHDguGzw50CNKNlaOGicaGicaGig1LC3nHz2u6icDbihjLy29Yzcb3AxrOihrOAxmGDMfSDwuGywXYzwfKEsbLEgLZDhmNlaOGicaGicaGic4UlIHKzxrHAwXZid8GEYbKzxrHAwXZih0GoIb7FsKScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLihvWzgf0Aw5Nia','C3rHCNrZv2L0Aa','icaGic8VifbYAw9YAxr5idi6ihzPzxDrDwvYEsaODMLYDhvHBcb2Awv3igrHCMKGCgf5Bg9HzcKkicaGia','jZSkcIaGicaGic8VienVBMzPz3vYyxrPB24GB3b0Aw9UCWOGicaGicbJB25ZDcbSB2DNAw5Nrw5HyMXLzca9ignVBMzPzY5SB2DNAw5Nice9psbMywXZztSkicaGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGicbSB2DNzxiUAw5MBYH7cIaGicaGicaGzxzLBNq6icDTB2r1BgvFC3rHCNrPBMCNlaOGicaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicaGihbVCNqScIaGicaGicaGy29YCZOGChjVy2vZCY5LBNyUq09su19ftKfcteveice9psaNzMfSC2uNlaOGicaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGicbSB2DNAw5NoIbSB2DNAw5Nrw5HyMXLzcWkicaGicaGicbHCgLlzxK6igfWAuTLEvjLCxvPCMvKcIaGicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGicaVlYbdt1jtig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbdt1jtx0voqujmruqGzgfUienpuLnFt1jjr0LouYbKAsaUzw52kqOGicaGicbHChaUDxnLkgnVCNnnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cGOGicaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGicbHChaUDxnLkhnLy3vYAxr5sgvHzgvYCY5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GsLnptIbWyxjZAw5Nig1PzgrSzxDHCMuGzgvUz2fUigvYCM9YigHHBMrSAw5NcIaGicaGigfWCc51C2uOyM9KEvbHCNnLCI5QC29UkhSkicaGicaGicbSAw1PDdOGjZeWBwiNlaOGicaGicaGihzLCMLMEtOGkhjLCsWGCMvZlcbIDwySigvUy29KAw5Nksa9pIb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGzw1WDhKGyNvMzMvYcIaGicaGicaGicbPzIaOyNvMlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGicaGicbYzxr1CM47cIaGicaGicaGicb9cGOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGsLnptI5WyxjZzsHIDwyPoWOGicaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGsLnptIbqyxjZzsbfCNjVCIbMCM9Ticr7CMvXlMLWFtOGjhTLCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKiePtt04GCgf5Bg9HzcCScIaGicaGicaGicaGicaGBwvZC2fNztOGj1rOzsbWyxLSB2fKihnLBNqGAxmGBM90igeGDMfSAwqGsLnptIbMB3jTyxqNlaOGicaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2uScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbku09ojYK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9ksK7cGOGicaGicaVlYbvuKWTzw5JB2rLzcbWyxjZAw5Nig1PzgrSzxDHCMukicaGicaGyxbWlNvZzsHIB2r5ugfYC2vYlNvYBgvUy29KzwqOEWOGicaGicaGigv4DgvUzgvKoIb0CNvLlaOGicaGicaGigXPBwL0oIaNmtbTyICkicaGicaGFsKPoWOkicaGicaGlY8GuMvXDwvZDcbSB2DNAw5Nig1PzgrSzxDHCMuGkfbPBM8TyMfZzwqPcIaGicaGigLMicHSB2DNAw5Nrw5HyMXLzcKGEWOGicaGicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGicaGicaVlYbhzw5LCMf0zsbYzxf1zxn0ieLecIaGicaGicaGicbYzxeUAwqGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lwLKj10GFhWGDxvPzhy3kcK7cIaGicaGicaGicbYzxmUC2v0kcDylvjLCxvLC3qTsuqNlcbYzxeUAwqPoWOkicaGicaGicaGic8VienYzwf0zsbZy29WzwqGBg9Nz2vYihvUDhvRihjLCxvLC3qGAw5PcIaGicaGicaGicbYzxeUBg9Nid0Gy3jLyxrLuMvXDwvZDeXVz2DLCIH7cIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKlaOGicaGicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGicaGihbHDgG6ihjLCs5WyxrOlaOGicaGicaGicaGicbPCdOGCMvXlMLWcIaGicaGicaGicb9ktSkcIaGicaGicaGicaVlYbdyxb0DxjLihn0yxj0ihrPBwukicaGicaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicaGicaGlY8Gtg9NihjLC3bVBNnLigTLDgLRysbZzwXLC2fPcIaGicaGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicaGicaGy29UC3qGw3nLy29UzhmSig5HBM9ZzwnVBMrZxsa9ihbYB2nLC3mUAhj0Aw1Lkhn0yxj0vgLTzsK7cIaGicaGicaGicaGignVBNn0igr1CMf0Aw9UtxmGpsbWyxjZzuzSB2f0kcHZzwnVBMrZicOGmtaWmcaRig5HBM9ZzwnVBMrZic8Gmwu2ks50B0zPEgvKkdiPktSkicaGicaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGicaGicb9ktSkcIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8ViefqssblzxKGDMfSAwrHDgLVBIbTAwrKBgv3yxjLicHJB25ZDgfUDc10Aw1LignVBxbHCMLZB24PcIaGicaGigLMicHHCgLlzxLszxf1AxjLzcKGEWOGicaGicaGignVBNn0ignYExb0BYa9ihjLCxvPCMuOj2nYExb0BYCPoWOGicaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicaGigfWCc51C2uOjY9HCgKNlcaOCMvXlcbYzxmSig5LEhqPid0+ihSkicaGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicaGigLMicGHyxbPs2v5ksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbJB25ZDcbWCM92AwrLzeTLEsa9iej1zMzLCI5MCM9TkgfWAuTLEsK7cIaGicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGicaHy3j5ChrVlNrPBwLUz1nHzMvfCxvHBcHLEhbLy3rLzeTLEsWGChjVDMLKzwrlzxKPksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifjHDguGBgLTAxrPBMCGBwLKzgXLD2fYzsaOC3rVCMu6ig1LBw9YEsb1BNr1AYbZAw5NBguGBw9KzsWGuMvKAxmGDw50DwSGy2X1C3rLCIbTB2rLkqOGicaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicaGigfWCc51C2uOjY9HCgKNlcbYyxrLtgLTAxrLCI5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GswrLBxbVDgvUy3KGBwLKzgXLD2fYzsaOChjVDgvJDhmGBxv0yxrPB24Gzw5KCg9PBNrZigzYB20GzhvWBgLJyxrLigv4zwn1DgLVBIKkicaGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicaGigfWCc51C2uOjY9HCgKNlcbPzgvTCg90zw5JEu1PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkicaGicaGFqOkicaGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGicaGyxbWlNvZzsGNl2fWAsCSigjVzhLpChrPB25ZtwLKzgXLD2fYzs5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8Gqxv0BY1SB2fKihbSDwDPBIaOAMLRysbHzgePcIaGicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','igLUzM86jYWGzxjYB3iPoWOGicaGCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGzMv0y2HPBMCGzw5KCg9PBNqGAw5MB3jTyxrPB24NlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktS','lMfKzerHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cIaGicaGicaGBMv3rgf0ysa9ihjLC3bVBNnLrgf0ytSkcIaGicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicaGignVBNnVBguUzxjYB3iOj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicaVlYbgywXSyMfJAZOGz3vUywTHBIbTB2rLigXHBweGDgfUCgeGzxzLBNrZicH0zxrHCcbWCM9WywDHC2KGCMvXDwvZDeLKihvUDhvRieXPDMuGu3LUyYKkicaGicaGDhj5ihSkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','iIWkicaGicaGicaGicaGicaIzgLYzwn0Aw9UiJOGiKftqYikicaGicaGicaGicaGFsWkicaGicaGicaGicaGEWOGicaGicaGicaGicaGicjJB2X1Bw4IoIaI','l2rLBgv0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihjLCxvLC3qGyM9KEqOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','cIaQcIaQiez1BMDZAsb1BNr1AYbTzw5NzwTZzwT1C2KGBw9KDwWG','ihX8icfbCNjHEs5PC0fYCMf5kgrHDgeU','zgvSzxrL','ignVBxbVC2L0zsbKyxrHjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','jZSkicaGicaGy29UC3qGzM9YzwLNBKTLEsa9icC','jYWkicaGicaGicaGihrHyMXLtMfTztOGjW','iICScIaGicaGicaGzxHHBxbSztOG','Aw1WB3j0','cIaGica','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLicyMihjLC3vSDc5KyxrHicyMihjLC3vSDc5KyxrHlMXLBMD0Aca+idaPihSkicaGicaGy29UC3qGCMvJB3jKid0GCMvZDwX0lMrHDgfBmf07cIaGicaGigLMicHYzwnVCMrBCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1UxsaHpt0GDw5KzwzPBMvKicyMcIaGicaGicaGicbtDhjPBMCOCMvJB3jKw3jLCs5FCMvXDwvZDfnJB3bLlMnVBhvTBL0Pice9psbtDhjPBMCOCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicbTzxnZywDLoIaN','lY8Grw5KCg9PBNqGAw5MBYddOUkcRokaNsbZzwXMlwrVy3vTzw50Aw5NiefqsqPYB3v0zxiUz2v0kcCVAw5MBYCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZDcbHy3rPB25Zid0G','icH3AxrOigrLDgfPBcbPDgvTCYK','igjHCNukCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','lY8GvgfIzwWGDgfUCgeGyxvKAxqGy29SDw1UCZOGzgLZywjSzsbPBMPLy3rPB24GAgvSCgvYcG','jYKkicaGicaGica6ihbHDgGUAM9PBIH3B3jRAw5NrgLYlcaN','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGlY8GuKvbrcbVCgvYyxrPB25ZoIbPBMPLy3qGC2nVCguGAw50BYbYzxeUyM9KEs53AgvYzqOGigLMicHBj2rHDgf0ywjSzxmNlcaNCMvHzcCSicDSB29RDxaNlcaNCMvHzc1JB21WB3nPDguNxs5PBMnSDwrLCYHLBMrWB2LUDcKPihSkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbBC2nVCgvdB25KAxrPB25DoWOGicaGFsbLBhnLigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxeUyM9KEs53AgvYzs51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGih0GzwXZzsbPzIaOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPksb7cIaGicaGignVBNn0ig9YAwDPBMfStg9NAwmGpsbYzxeUyM9KEs53AgvYzs5SB2DPyYb8FcaNqu5ejZSkicaGicaGAwyGkg9YAwDPBMfStg9NAwmGpt09icDbtKqNksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCY51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGicaGFsbLBhnLihSkicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihSkicaGicaGicaGigXVz2LJoIaNqu5ejYWkicaGicaGicaGignVBMrPDgLVBNm6ifSkicaGicaGicaGicaGC2nVCgvdB25KAxrPB24ScIaGicaGicaGicaGihSGBg9NAwm6ig9YAwDPBMfStg9NAwmSignVBMrPDgLVBNm6ihjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFqOGicaGicaGicaGxqOGicaGicaGih07cIaGicaGih0kicaGih0kicb9cGOGic8VierftevurtOGChjLCgvUzcbZy29WzsbJB25KAxrPB24GDg8GD2HLCMuGyxjYyxKkicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNksb7cIaGicbPzIaOCMvXlMjVzhKUD2HLCMuPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUDw5ZAgLMDcHZy29WzunVBMrPDgLVBIK7cIaGicaGih0kicaGih0kicb9cGOGic8ViensrufursaVieferdOGzM9Yy2uGC2nVCguGy29SDw1UihzHBhvLcIaGAwyGkgvUzhbVAw50id09psaNywrKjYb8FcbLBMrWB2LUDca9pt0Gj2nYzwf0zsCPihSkicaGihjLCs5IB2r5wYC','yxnwAxu','AwyGkgHLywrLCKnHBgmUDg90ywXFyw1VDw50ksb7cIaGicaGic8VienHBgn1Bgf0zsb0B3rHBf9HBw91BNqGyxmGC3vTig9MicG','cIaGicb9oWOkicaGigzVCIaOy29UC3qGw3f1zxj5tMfTzsWGCxvLCNLtB3vYy2vDig9Mie9IAMvJDc5LBNrYAwvZkhf1zxj5rgvMAw5PDgLVBNmPksb7cIaGicaGihrYEsb7cIaGicaGicaGlY8Gq2vRigfWywTHAcbZDhjPBMCGzgLTDwXHAsbKzw5Nyw4GiMzPBgu6iIb1BNr1AYbTzw5LBNr1A2fUigfWywTHAcbPBMKGCgf0AcbMAwXLcIaGicaGicaGAwyGkhr5CgvVzIbXDwvYEvnVDxjJzsa9pt0Gj3n0CMLUzYCGjIyGCxvLCNLtB3vYy2uUC3rHCNrZv2L0AcGNzMLSztONksKGEWOGicaGicaGicaGlY8Gqw1IAwWGCgf0AcbYzwXHDgLMigrHCMKGCxvLCNLtB3vYy2ukicaGicaGicaGignVBNn0ihjLBgf0AxzLugf0Aca9ihf1zxj5u291CMnLlNjLCgXHy2uOj2zPBgu6jYWGjYCPoWOGicaGicaGicaGy29UC3qGzMLSzvbHDgGGpsbWyxrOlMPVAw4Ox19KAxjUyw1LlcbYzwXHDgL2zvbHDgGPoWOkicaGicaGicaGignVBNnVBguUBg9NkgbbDhrLBxb0Aw5NihrVihjLywqGDgvTCgXHDguGzMLSzsaKE3f1zxj5tMfTzx0GzNjVBsbWyxrOoIaKE2zPBgvqyxrOFwaPoWOkicaGicaGicaGigLMicHMCY5LEgLZDhntEw5JkgzPBgvqyxrOksKGEWOGicaGicaGicaGicb0zw1WBgf0zxnBCxvLCNLoyw1Lxsa9igzZlNjLywrgAwXLu3LUyYHMAwXLugf0AcWGj3v0zJGNktSkicaGicaGicaGicaGy29UC29Szs5SB2COyfnrtcb0zw1WBgf0zsaKE3f1zxj5tMfTzx0GBg9HzgvKihn1y2nLC3nMDwXSEsbMCM9TigzPBgu6icr7CMvSyxrPDMvqyxrOFwaPoWOGicaGicaGicaGFsbLBhnLihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGu1fmihrLBxbSyxrLigzPBguGjhTXDwvYEu5HBwv9ig5VDcbMB3vUzdOGjhTMAwXLugf0Ah1GktSkicaGicaGicaGicaGDgvTCgXHDgvZw3f1zxj5tMfTzv0GpsbUDwXSoWOGicaGicaGicaGFqOGicaGicaGih0GzwXZzsb7cIaGicaGicaGicaVlYbkAwTHigj1A2fUihbHDgGGzMLSzsWGz3vUywTHBIbZDhjPBMCGu1fmigXHBMDZDw5NcIaGicaGicaGicb0zw1WBgf0zxnBCxvLCNLoyw1Lxsa9ihf1zxj5u291CMnLoWOGicaGicaGicaGy29UC29Szs5SB2COyfnrtcb0zw1WBgf0zsaKE3f1zxj5tMfTzx0GBg9HzgvKihn1y2nLC3nMDwXSEsbMCM9TifnrtcbZDhjPBMDGktSkicaGicaGicb9cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIHGrxjYB3iGBg9HzgLUzYbtuuWGDgvTCgXHDguGjhTXDwvYEu5HBwv9oMaSigvYCM9YktSkicaGicaGicb0zw1WBgf0zxnBCxvLCNLoyw1Lxsa9ig51BgW7cIaGicaGih0kicaGih0','cNjVDxrLCI5WB3n0kcCVzgvSzxrLjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VihjLCs5SB2CUzgvIDwCOj1jLCxvLC3qGyM9KEsa','lMfNz3jLz2f0zurHDgeOCMvXlMjVzhKGFhWGE30SigfNz3jLz2f0zunVBMzPzYK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fNCMvNyxnPigrHDgeG','Ehj0wvG','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','DxbKyxrLzef0','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzW','ieforca','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8GvvbeqvrfoIbMB3jJzsbZy29WzsbJB2X1Bw4GDMfSDwuGkg93BMvYC2HPCcb2zxjPzMLLzcbPBIaVDxbKyxrLigHHBMrSzxiPcIaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGCMvXlMjVzhLBjW','Cg9W','vLzJEwC','Cxr5rMLLBgq','cIaQifrHyMXLoIa','Dgv4DezPzwXKCW','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGsu5trvjuievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwqGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI5PBNnLCNqPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HjBNnLCNqOcIaGicaGicaGjW','laOGicaGicbYzxf1AxjLzezPzwXKCZOG','BgvUz3rO','iL0ScIaGicaGicaGicaIC29YDf9JB2X1Bw5ZiJOGwWOGicaGicaGicaGicb7cIaGicaGicaGicaGicaGiMnVBhvTBIi6ici','yxvKAxrdB2X1Bw5Z','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','DxbKyxrLzej5','BNvSBa','Aw5MBW','jZSkcIaGicaVlYbtzxr1Ccb2Awv3tMfTzsb1BNr1AYbVCgvYyxnPihjLywqGAMLRysbIzxjIzwrHigrHCMKGDgfIBgvoyw1LcIaGicb0AgLZlNzPzxDoyw1Lid0GjW','q29KzwDLBIbPBNzHCMLHBNqGDMLVBgf0Aw9UoIa','zw50CMLLCW','vw9Yv2G','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKimoI4OkS4OcDig5Vihf0EsbMAwvSzcbJB25MAwD1CMvKicHZzxqGyxv0B0nHBgn1Bgf0zuzPzwXKCY50B3rHBf9HBw91BNqUzM9YBxvSysbVCIbOzwfKzxjdywXJDwXHDgLVBNmUDg90ywXFCxr5lNnVDxjJzsK','l2rHDgf0ywjSzxmGlsbeyxrHihvUDhvRierHDgfuywjSzxmkCM91DgvYlNbVC3qOjY9KyxrHDgfIBgvZjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VihjLCs5SB2CUzgvIDwCOj1jLCxvLC3qGyM9KEsa','DMLLD05HBwu','zMLLBgrqB2XPy3K','zgv0ywLSvgfIBgu','C2vHCMnOq29SDw1UCW','cIaGicaVlYbdzwSGyxbHA2fOihbYAw1HCNKGA2v5igfKywXHAcbvvuLeihLHBMCGDMfSAwqGkgPPA2eGChjPBwfYEsbRzxKGywrHBgfOicDPzcCPcIaGicbJB25ZDcb1DwLKuMvNzxGGpsaVxLSWltLHlwzDEZH9lvSWltLHlwzDEZr9lvSXltvDwZaToweTzL17m30TwZG5ywjDwZaToweTzL17m30TwZaToweTzL17mtj9jc9PoWOGicaGy29UC3qGAxnwywXPzfvvsuqGpsbWCMLTyxj5s2v5id09psaNAwqNicyMihv1AwrszwDLEc50zxn0khjLCs5IB2r5w3bYAw1HCNLlzxLDktSkcIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','oWOkicaGic8VifzHBgLKyxnPigrHBIbZyw5PDgfZAsbOzwfKzxiGzgf0ysbKzw5Nyw4Gy29UC3rYywLUDcaODgvYBwfZDwSGAgfZAcKkicaGigLMicH0ExbLB2yG','Dg90ywXFyw1VDw50','cI8VieTHzMTHifbYB2r1y2vYifnLCNzPy2uGDw50DwSGzxzLBNqGChvIBgLZAgLUzWPSzxqGA2fMA2ftzxj2AwnLid0GBNvSBdSkDhj5ihSkicbRywzRyvnLCNzPy2uGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3nLCNzPy2vZl2THzMTHu2vYDMLJzsCPlMDLDeLUC3rHBMnLkcK7cN0Gy2f0y2GGkguPihSkicbJB25ZB2XLlMvYCM9YkcDduKLusunbtdOGs2fMA2eGC2vYDMLJzsbMywLSzwqGDg8GBg9HzcbIDxqGs2fMA2eGChvIBgLZAgLUzYbPCYbJB25MAwD1CMvKoICSiguUBwvZC2fNzsK7cIaGDgHYB3CGztSkFqOklY8Gs2fMA2eGy29UzMLNDxjHDgLVBIbKyxjPihbHEwXVywqky29UC3qGA2fMA2fdB25MAwCGpsa','nJG0otGZBvLHz1fu','cIaGicaVlYbbzgqGBwv0ywrHDgeGDw50DwSGzgvIDwDNAw5NicHKzxzLBg9WBwvUDcbVBMX5kqOGicaGAwyGkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNicyMihjLC3vSDc5ZDwnJzxnZksb7cIaGicaGihjLC3vSDc5FBwv0ywrHDgeGpsb7cIaGicaGicaGzw5KCg9PBNq6icC','oWOGicaGDgHPCY5OyxnfEhbVCNrrDwvYEsa9ia','jYWkicaGicaGicaGigrLDgfPBfrHyMXLoIaN','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AwrHDguGzgf0zsbJB25ZDhjHAw50CWOGicaQlWOGif92ywXPzgf0zurHDgvdB25ZDhjHAw50CYHMAwvSze5HBwuSihzHBhvLlcbJB25ZDhjHAw50CYKGEWOGicaGy29UC3qGzxjYB3jZid0Gw107cIaGicbSzxqGC2fUAxrPEMvKid0GDMfSDwu7cGOGicaGlY8GqMfZAwmGzgf0zsb2ywXPzgf0Aw9UicHTB3jLignVBxbSzxGGCgfYC2LUzYbOyw5KBgvKigj5ierHDgvuAw1LugfYC2vYigLUigjHC2vTB2rLBcKkicaGic8Vie1PBI9nyxGGzgf0zsbYyw5NzqOGicaGAwyGkgnVBNn0CMfPBNrZlM1PBIb8FcbJB25ZDhjHAw50CY5TyxGPihSkicaGicaGDhj5ihSkicaGicaGicbJB25ZDcbKyxrLvMfSDwuGpsbUzxCGrgf0zsHZyw5PDgL6zwqPoWOGicaGicaGigLMicHPC05HtIHKyxrLvMfSDwuUz2v0vgLTzsGPksKGEWOGicaGicaGicaGzxjYB3jZlNb1C2GOyezPzwXKicCKE2zPzwXKtMfTzx0Nig11C3qGyMuGysb2ywXPzcbKyxrLycK7cIaGicaGicaGFsbLBhnLihSkicaGicaGicaGigLMicHJB25ZDhjHAw50CY5TAw4PihSkicaGicaGicaGicaGy29UC3qGBwLUrgf0zsa9ig5LDYbeyxrLkgnVBNn0CMfPBNrZlM1PBIK7cIaGicaGicaGicaGigLMicHKyxrLvMfSDwuGpcbTAw5eyxrLksb7cIaGicaGicaGicaGicaGy29UC3qGBwvZC2fNzsa9ignVBNn0CMfPBNrZlM1PBK1LC3nHz2uGFhWGyezPzwXKicCKE2zPzwXKtMfTzx0Nig11C3qGyMuGB24GB3iGywz0zxiGjhTJB25ZDhjHAw50CY5TAw59ydSkicaGicaGicaGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGicaGicaGicaGFqOGicaGicaGicaGFqOGicaGicaGicaGAwyGkgnVBNn0CMfPBNrZlM1HEcKGEWOGicaGicaGicaGicbJB25ZDcbTyxHeyxrLid0GBMv3ierHDguOy29UC3rYywLUDhmUBwf4ktSkicaGicaGicaGicaGAwyG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','ksb8FcaWktS','cGOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','AK5fvM0','zgv0ywLSuxvLCNK','cIaGicaVlYbwywXPzgfZAsbWCMLTyxj5igTLEqOGicaGy29UC3qGChjPBwfYEuTLEsa9icC','ywDNCMvNyxrLq29UzMLN','cIaGicaVlYbgBgfNihvUDhvRihnLBgyTzg9JDw1LBNrPBMCGqvbjicHLBMrWB2LUDcaVAw5MBYKkicaGihrOAxmUAgfZvMLLD1f1zxj5id0G','cGOGicaGlY8GuMvWBgfJzsbHBNKGCMvTywLUAw5NihbSywnLAg9SzgvYCYaTigD1BMfRyw4GCMvHzfnVDxjJzsb1BNr1AYbVCgvYyxnPihjLywqkicaGigjHC2vrDwvYEsa9igjHC2vrDwvYEs5YzxbSywnLkc8KE3rHyMXLtMfTzx0VzYWGDgHPCY5YzwfKu291CMnLktSkicaGigjHC2vrDwvYEsa9igjHC2vrDwvYEs5YzxbSywnLkc8KE3rOAxmUDgfIBgv9l2CSihrOAxmUCMvHzfnVDxjJzsK7cGOGicaGCMv0DxjUigjHC2vrDwvYEtSkicb9cGOGic8QkGOGicaQie92zxjYAwrLigDLDfjLywrrDwvYEsb1BNr1AYbLBMrWB2LUDcaVCMvHzaOGicaQifbYAw9YAxrHCZOGDMLLD05HBwuGlt4GDMLLD1f1zxj5ic0+ihrHyMXLtMfTzsaOu0vmrunuicOGrLjptsbYzwfKu291CMnLkqOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0GuxvLCNKGB3b0Aw9UCWOGicaQiebYzxr1CM5ZihTZDhjPBMD9ifnrtcbXDwvYEsbKyxnHCIb1BNr1AYaVCMvHzaOGicaQlWOGigDLDfjLywrrDwvYEsHVChrPB25Zid0GE30PihSkicaGic8VifbYAw9YAxr5ide6ihzPzxDoyw1LicHYzwfSigrHDgfIyxnLihzPzxCPcIaGicbPzIaODgHPCY52Awv3tMfTzsaMjIb0AgLZlNzPzxDoyw1Lice9psb0AgLZlNrHyMXLksb7cIaGicaGihjLDhvYBIaNu0vmrunuicOGrLjptsaNicSGDgHPCY52Awv3tMfTztSkicaGih0k','iIWGiG','l3jLywqTy29TCg9ZAxrLoICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGlY8GvMfSAwrHC2KGCMvXDwvZDcbIB2r5cIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsb3AgvYzsbJBgf1C2ukicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0Esb3AgvYzsbPCYbYzxf1AxjLzcCScIaGicaGicaGzxHHBxbSztOGEWOGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6icjMAwvSzf9Uyw1LiIWGiNzHBhvLiJOGiMzPzwXKx3zHBhvLiIb9xqOGicaGicaGih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGzM9YBwf0ihDOzxjLcIaGicbPzIaOiufYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPicyMicfYzxeUyM9KEs53AgvYzs5JB25KAxrPB25Zksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIbBcIaGicaGicaGicaGihSGiMTLEsi6ici','cIaGicaVlYbwywXPzgfZAsbKyw4GC2fUAxrHC2KGAgvHzgvYigrHDgeGzgvUz2fUignVBNn0CMfPBNqGkhrLCM1HC3vRigHHC2GPcIaGicbPzIaODhLWzw9Mia','zgv0zwn0vgv4DenVBhvTBG','v2vXy1u','laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGignVBNn0igrHDgeGpsbYzxeUyM9KEs4','v0HfuKuG','lMDLDerHDgf0ywjSzxmOB3b0Aw9UCYK7cGOGicaGlY8GtwvUyw1IywHRyw4GBM9TB3iGyMfYAxmGDw50DwSGrgf0yvrHyMXLCYbQAwTHigrPCgvYBhvRyw4kicaGigLMicHYzxn1BhqUzgf0ysaMjIbbCNjHEs5PC0fYCMf5khjLC3vSDc5KyxrHksKGEWOGicaGicbYzxn1BhqUzgf0ysa9ihjLC3vSDc5KyxrHlM1HCcGOAxrLBsWGAw5KzxGPid0+icH7cIaGicaGicaGlI4UAxrLBsWkicaGicaGicbYB3DUDw1LCMf0B3i6ig9WDgLVBNmUC3rHCNqGkYbPBMrLEcaRidekicaGicaGFsKPoWOGicaGFqOkicaGic8ViefKzcbTzxrHzgf0ysb1BNr1AYbKzwj1z2DPBMCGkgrLDMvSB3bTzw50ig9UBhKPcIaGicbPzIaOChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCPihSkicaGicaGCMvZDwX0lL9TzxrHzgf0ysa9ihSkicaGicaGicbLBMrWB2LUDdOGjW','cIaGicaVlYbgAwXLihvWBg9HzcbMAwvSzhmGkePtt05cignVBhvTBNmPcIaGicb0AgLZlMzPBgvgAwvSzhmGpsa','Bg9VA3vW','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','id0G','ksb8FcaWoWOGicaGicaGicaGCMv0DxjUihn1BsaRicHXDhKGkIbWCMLJzsK7cIaGicaGicaGFsWGmcK7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2fTB3vUDca9icqKE3jLy2fSy1bSywnLAg9SzgvYkYT9ycK7cIaGicaGicaGCMvJywXJDwXHDgvKvMfSDwvZlNb1C2GODg90ywXbBw91BNqPoWOGicaGicb9','cIaGicbJB25ZDcbOzwfKzxjdywXJid0G','DxbKyxrLq29TCg9ZAxrL','u1HKEuG','BwfZDgvYrgv0ywLS','DhjPBq','id0Gke51BwjLCIHPDgvTlG','ihn0AwXSignVBNrHAw5ZicjMAwXLoIiGCMvMzxjLBMnLicG','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGy29UC3qGzw5KCg9PBNqGpsbYzxeUCgf0Ac5ZDwjZDhjPBMCOmsK7cIaGy29UC3qGC2nVCgvdB25KAxrPB24Gpsb7igTLEtOGjW','cIaQiebWyxjHBsb7t2jQzwn0FsbJB25MAwCGlsblB25MAwD1CMfZAsb1BNr1AYbTzw5QywXHBMTHBIbTB2r1BaOGkIbaCgfYyw0GE251BwjLCN0Gy29UzMLNlNbVCNqGlsbqB3j0ihvUDhvRihnLCNzLCGOGkIbaCgfYyw0GE3n0CMLUz30Gy29UzMLNlMTLEsaTiefqssblzxKGkg9WC2LVBMfSkqOGkIbaCgfYyw0GE2jVB2XLyw59ignVBMzPzY5JB3jZic0Grw5HyMXLienpuLmGkgrLzMf1Bhq6ihrYDwuPcIaQiebWyxjHBsb7yM9VBgvHBN0Gy29UzMLNlMXVz2DPBMCGlsbfBMfIBguGCMvXDwvZDcbSB2DNAw5NicHKzwzHDwX0oIb0CNvLkqOGkIbaCMv0DxjUCYb7uhjVBwLZztX2B2LKpN0GuhjVBwLZzsb5yw5NihrPzgfRihbLCM5HAcbYzxnVBhzLigfNyxiGC2vYDMvYihrLDgfWigjLCMPHBgfUcIaQlWPHC3LUyYbMDw5JDgLVBIbLEgvJDxrLkgnVBMzPzYKGEWOGihjLDhvYBIbUzxCGuhjVBwLZzsGOCMvZB2X2zsWGCMvQzwn0ksa9pIb7cIaGicb0CNKGEWOGicaGicbJB25ZDcbHChaGpsbLEhbYzxnZkcK7cIaGicaGignVBNn0ihbVCNqGpsbJB25MAwCUCg9YDcb8FcaZmdaWoWOGicaGicbJB25ZDcbZzxj2zxjbzgrYzxnZid0Gy29UzMLNlNnLCNzLCKfKzhjLC3mGFhWGjZaUmc4WlJaNoYaVlYbezwzHDwX0idaUmc4WlJaGDw50DwSGyMfJA3DHCMqGy29TCgf0AwjPBgL0EqOGicaGicbJB25ZDcbTB2r1Bgvoyw1Lq2fWAxrHBgL6zwqGpsaN','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLy29YzeLKih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','cI8Vifbpu1qGl2fWAs8','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGy3jLyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','l2LUzM8NlcaOCMvXlcbYzxmPid0+ihSkicaGicaGicbYzxmUANnVBIH7cIaGicaGicaGicbUyw1LoIaN','DhLWzq','A2v5CW','DxbKyxrL','iJOGiMv4Axn0Aw5NlwLKiIWkicaGicaGicaGicaGiMzPzwXKmsi6icj2ywX1zteIlaOGicaGicaGicaGicaIzMLLBgqYiJOGiNzHBhvLmIikicaGicaGicaGih0kicaGicaGicb9','jYWkicaGicaGicaGihnLCNzPy2vZoIb7FsWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8ihjLCs5IB2r5lNvWzgf0zwrFyNKGFhWGj3n5C3rLBsCScIaGicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGicaGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcWkicaGicaGicaGicaGlY8GsLDuigzVCNDHCMrPBMCGkeXHEwvYideGuKXtktOGqxv0Ag9YAxPHDgLVBIbOzwfKzxiGzgfYAsbYzxf1zxn0igfZBgKkicaGicaGicaGicaGlY8GzgKTzM9YD2fYzcbRzsb3B3jRzMXVDYbOB29RignHBgWGywDHCIbLBMrWB2LUDcb0DwP1yw4GEwfUzYbWDw55yqOGicaGicaGicaGicaVlYbYzxf1zxn0u2nVCguGywT0AwyGDgv0yxaGBwvUzxjPBweGCMvXlNvZzxiGzgvUz2fUihnJB3bLihLHBMCGC2fTys4kicaGicaGicaGicaGlY8Gu2vSywX1igrPlxnLDcaOyNvRyw4GA29UzgLZAw9UywWGCgfKysbWyxLSB2fKlNjLCxvLC3rty29WzsKGA2fYzw5HcIaGicaGicaGicaGic8VigHVB2SGvvjmihr1ANvHBIbTDw5NA2LUihb1BNLHihjLCxvLC3rty29WzsbZzw5KAxjPihDHBgf1ChvUig1VzhvSzqOGicaGicaGicaGicaVlYbZDw1IzxiGDgLKywSUcIaGicaGicaGicaGigf1DgHizwfKzxi6ihjLCs5OzwfKzxjZlMf1DgHVCML6yxrPB24GFhWGBNvSBaOGicaGicaGicaGFqOGicaGicaGih07cGOGicaGicaGic8VieLUAMvJDcbZzxj2AwnLCYbQAwTHihrLCNnLzgLHcIaGicaGicaGDhj5ihSkicaGicaGicaGignVBNn0ihSGCMvZB2X2zvnLCNzPy2vZih0GpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl3nLCNzPy2uTCMvZB2X2zxiNktSkicaGicaGicaGigv2zw50q29UDgv4Dc5Zzxj2AwnLCYa9ihjLC29SDMvtzxj2AwnLCYGPoWOGicaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaGic8VifnLCNzPy2uGCMvZB2X2zxiGB3bZAw9UywWkicaGicaGicb9cGOGicaGicaGihjLC3vSDca9igf3ywL0ia','cIaGicb9oWOGih0kcIaGlYOQcIaGicOGtg9HzcbHzhzHBMnLzcbXDwvYEsb0zw1WBgf0zxmGzgfYAsbMAwXLcIaGicOGqhjLDhvYBNmGE09IAMvJDh0GvgvTCgXHDgvZifnrtcb1BNr1AYbHzhzHBMnLzcbXDwvYAwvZcIaGicOVcIaGBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOksb7cIaGicbJB25ZDcb0zw1WBgf0zxmGpsb7FtSkicaGia','lNjLzhvJzsGOC3vTlcbPDgvTksa9pIbZDw0GkYaOtNvTyMvYkgL0zw1BCxr5rMLLBgrDksb8FcaWksWGmcK7cIaGicb9cIaGica','Aw1WB3j0q29UzMLN','sxPJz1y','zgvSzxrLigHLywrLCKrHDgfgB3jwywXPzgf0Aw9UlG','lMDLDerHDgeOz2v0ugf5Bg9HzcK7cG','cIaGicaGignVBNn0ignHBgn1Bgf0Aw9UCYa9ia','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','y2rrEfm','jYK7cGOGicaGicb0CNKGEWOGicaGicaGic8VievUC3vYzsbTB2r1BgvZigrPCMvJDg9YEsbLEgLZDhmkicaGicaGicbPzIaOiwzZlMv4Axn0C1n5BMmOBw9KDwXLC0rPCIKPihSkicaGicaGicaGigzZlM1RzgLYu3LUyYHTB2r1BgvZrgLYlcb7ihjLy3vYC2L2ztOGDhj1zsb9ktSkicaGicaGicaGignVBNnVBguUBg9NkgbdCMvHDgvKig1VzhvSzxmGzgLYzwn0B3j5oIaKE21VzhvSzxneAxj9ycK7cIaGicaGicaGFqOkicaGicaGicaVlYbszwfKigrHBIbSB2fKihnLBxvHigvUzhbVAw50igzPBgvZcIaGicaGicaGy29UC3qGzMLSzxmGpsbMCY5YzwfKzgLYu3LUyYHTB2r1BgvZrgLYktSkicaGicaGicbJB25ZDcbLBMrWB2LUDezPBgvZid0GzMLSzxmUzMLSDgvYkgzPBguGpt4GzMLSzs5LBMrZv2L0AcGNlMPZjYKPoWOkicaGicaGicbPzIaOzw5KCg9PBNrgAwXLCY5Szw5NDgGGpt09idaPihSkicaGicaGicaGignVBNnVBguUBg9NkgboBYbLBMrWB2LUDcbMAwXLCYbMB3vUzcbPBIaKE21VzhvSzxneAxj9ycK7cIaGicaGicaGicbJB25ZB2XLlMXVzYHGqwrKigvUzhbVAw50igzPBgvZihrVigvUywjSzsbbueKGzNvUy3rPB25HBgL0EwaPoWOGicaGicaGih0GzwXZzsb7cIaGicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNzw5KCg9PBNrZx2XVywrPBMCNlcbJB3vUDdOGzw5KCg9PBNrgAwXLCY5Szw5NDgGGFsWGyeXVywrPBMCGjhTLBMrWB2LUDezPBgvZlMXLBMD0Ah0Gzw5KCg9PBNqOCYLGktSkicaGicaGicb9cGOGicaGicaGic8VifjLz2LZDgvYihnLDgLHCcbLBMrWB2LUDaOGicaGicaGigzVCIaOy29UC3qGzMLSzsbVzIbLBMrWB2LUDezPBgvZksb7cIaGicaGicaGicb0CNKGEWOGicaGicaGicaGicbJB25ZDcbLBMrWB2LUDe5HBwuGpsbWyxrOlMjHC2vUyw1LkgzPBguSicCUANmNktSkicaGicaGicaGicaGy29UC3qGzw5KCg9PBNrqyxrOid0GCgf0Ac5QB2LUkg1VzhvSzxneAxiSigzPBguPoWOkicaGicaGicaGicaGlY8Gq2XLyxiGBw9KDwXLignHy2HLihvUDhvRigrLDMvSB3bTzw50cIaGicaGicaGicaGigLMicHYzxf1AxjLlMnHy2HLw2vUzhbVAw50ugf0Af0PihSkicaGicaGicaGicaGicbKzwXLDguGCMvXDwLYzs5JywnOzvTLBMrWB2LUDfbHDgHDoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicbJB25ZDcbLBMrWB2LUDfjVDxrLCIa9ihjLCxvPCMuOzw5KCg9PBNrqyxrOktSkcIaGicaGicaGicaGigLMicGHzw5KCg9PBNrsB3v0zxiPihSkicaGicaGicaGicaGicbJB25ZB2XLlNDHCM4OyevUzhbVAw50icr7zw5KCg9PBNroyw1LFsbKAwqGBM90igv4Cg9YDcbHihjVDxrLCMaPoWOGicaGicaGicaGicaGignVBNrPBNvLoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicaVlYbszwDPC3rLCIbLBMrWB2LUDcbKzw5Nyw4GChjLzML4cIaGicaGicaGicaGignVBNn0igvUzhbVAw50uhjLzML4id0Gyc9HCgKV','icaGicaGicaVlYbbDxrVlwnHBgn1Bgf0zsa','lMrLBgv0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cGOGicaGicaGignVBNnVBguUBg9NkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfignVBxbSzxrLzcbZDwnJzxnZzNvSBhKGD2L0AcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfigzHAwXLzdONlcbLCNjVCI5TzxnZywDLktSkicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGFqOGicaGFsbLBhnLihSkicaGicaGlY8GrMfSBgjHy2S6igD1BMfRyw4GBw9KzsbSyw1HihrHBNbHigv2zw50CYaODgv0yxaGChjVCgfNyxnPihjLCxvLC3rjzcb1BNr1AYbmAxzLifn5BMmPcIaGicaGihrYEsb7cIaGicaGicaGCMvZCg9UC2veyxrHid0GyxDHAxqG','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0ScIaGicaGicaGicaIC2vSzwn0iJOGwYjMAwvSzdeIlcaIzMLLBgqYiL0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbKyw4GD2HLCMuUDMfSDwukicaGigLMicGHCMvXlMjVzhKUD2HLCMuUA2v5ihX8ihjLCs5IB2r5lNDOzxjLlNzHBhvLid09psb1BMrLzMLUzwqGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09ig51BgWGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09icCNksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj1DOzxjLigTLEsbHBMqGDMfSDwuGyxjLihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIb7icjRzxKIoIaI','l2fNz3jLz2f0zsaTiefNz3jLz2f0zsbKyxrHicHJB3vUDcWGC3vTlcbHDMCSig1PBIWGBwf4kqPYB3v0zxiUCg9ZDcGNl2fNz3jLz2f0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZDcbHz2DYzwDHDgvdB25MAwCGpsa','oWOGih0kcIaGlYOQcIaGicOGqNvPBgqGC2vHCMnOifDirvjfignSyxvZzsbIzxjKyxnHCMTHBIbZzwfYy2HHyMXLignVBhvTBNmkicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOvMfSDwuGlsboAwXHAsbWzw5JyxjPyw4kicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOqNKGlsblB2XVBsb5yw5NigrPy2fYAqOGicaQiebYzxr1CM5ZihTZDhjPBMD9ifDirvjfignSyxvZzqOGicaQlWOGigj1AwXKu2vHCMnOv2HLCMvdBgf1C2uOC2vHCMnOvMfSDwuSihnLyxjJAej5id0Gj2fSBcCPihSkicaGigLMicGHC2vHCMnOvMfSDwuGFhWGC2vHCMnOvMfSDwuUDhjPBsGPid09psaNjYKGEWOGicaGicbYzxr1CM4GjYC7cIaGicb9cGOGicaGy29UC3qGC2vHCMnOywjSzunVBhvTBNmGpsb0AgLZlMDLDfnLyxjJAgfIBgvdB2X1Bw5ZkcK7cIaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGy29UC3qGBgLRzvzHBhvLid0GycuKE2vZy2fWzwrtzwfYy2HwywX1zx0LydSkcIaGicbPzIaOC2vHCMnOqNKGjIyGC2vHCMnOqNKGit09icDHBgWNksb7cIaGicaGic8VienHCMKGzgKGA29SB20GC3bLC2LMAwSkicaGicaGy29UC3qGy29SDw1Uid0GC2vHCMnOywjSzunVBhvTBNmUzMLUzcHJB2WGpt4Gy29SlM5HBwuGpt09ihnLyxjJAej5ktSkicaGicaGAwyGkgnVBhvTBIaMjIbJB2X1Bw4UC2vHCMnOywjSzsKGEWOGicaGicaGihjLDhvYBIbGv0HfuKuGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydSkicaGicaGFqOGicaGFqOkicaGic8VienHCMKGzgKGC2vTDweGA29SB20GC2vHCMnOywjSzqOGicaGy29UC3qGy29UzgL0Aw9UCYa9ihnLyxjJAgfIBgvdB2X1Bw5ZcIaGicaGic5MAwX0zxiOy29Sid0+ignVBc5ZzwfYy2HHyMXLkqOGicaGicaUBwfWkgnVBca9pIbGvvbqrviOjhTJB2WUBMfTzx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPycK7cGOGicaGAwyGkgnVBMrPDgLVBNmUBgvUz3rOid4GmcKGEWOGicaGicbYzxr1CM4GyfDirvjficGKE2nVBMrPDgLVBNmUAM9PBIGNie9sicCPFsLGoWOGicaGFqOkicaGihjLDhvYBIaNjZSkicb9','l2fKANvZDcaTiefKANvZDcbKyxrHia','cIaGicaGih0kcIaGicaGic8VidmUifbYB3nLCYbWyxjHBwv0zxiGD2HLCMuGzgvUz2fUigzVCM1HDcbHzhzHBMnLzcbJB25KAxrPB25ZcIaGicaGigXLDcb3AgvYzvbHCMfTCYa9ifTDoWOGicaGicbPzIaOD2HLCMuGjIyGkefYCMf5lMLZqxjYyxKOD2HLCMuPihX8icH3AgvYzs5JB25KAxrPB25ZicyMiefYCMf5lMLZqxjYyxKOD2HLCMuUy29UzgL0Aw9UCYKPksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbSzxqGCgfYyw1Zid0Gw107cIaGicaGicaGicbSzxqGCgfYyw1jBMrLEca9ide7cIaGicaGicaGicbJB25ZDcb3AgvYzvjLC3vSDca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOD2HLCMuSihbHCMfTCYWGCgfYyw1jBMrLEcK7cIaGicaGicaGicbPzIaOD2HLCMvszxn1BhqUC3fSksb7cIaGicaGicaGicaGigLMicH3AgvYzunSyxvZzsKGEWOGicaGicaGicaGicaGihDOzxjLq2XHDxnLicS9icCGqu5eicGNicSGD2HLCMvszxn1BhqUC3fSicSGjYKNoWOGicaGicaGicaGicb9igvSC2uGEWOGicaGicaGicaGicaGihDOzxjLq2XHDxnLid0Gj1DirvjficCGkYb3AgvYzvjLC3vSDc5ZCwW7cIaGicaGicaGicaGih0kicaGicaGicaGicaGD2HLCMvqyxjHBxmGpsb3AgvYzvjLC3vSDc5WyxjHBxm7cIaGicaGicaGicb9cIaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYa0lIbnzw5NAgL0Dw5NihrVDgfSigrHDgeGA2vZzwX1CNvOyw4GkhrHBNbHigzPBhrLCIKkicaGicaGy29UC3qGy291BNruB3rHBff1zxj5id0GBMvLzhntDwjXDwvYEqOGicaGicaGid8Gj1nftevdvcbdt1vovcGQksbHCYb0B3rHBcbguK9nicGNicSGyMfZzvf1zxj5icSGjYKGyMfZzv9XDwvYEsCkicaGicaGica6icDtruXfq1qGq09vtLqOkIKGyxmGDg90ywWGrLjptsaNicSGDgHPCY5YzwfKu291CMnLoWOGicaGicbJB25ZDcbJB3vUDfrVDgfSuMvZDwX0id0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5kgnVDw50vg90ywXrDwvYEsK7cIaGicaGignVBNn0ihrVDgfSuMvJB3jKCYa9ignVDw50vg90ywXszxn1BhqGjIyGy291BNruB3rHBfjLC3vSDfSWxsa/ihbHCNnLsw50kgnVDw50vg90ywXszxn1BhrBmf0UDg90ywWPidOGmdSkcIaGicaGic8ViduUie1LBMDOAxr1BMCGANvTBgfOigrHDgeGDgvYzMLSDgvYicHQAwTHigfKysb3AgvYzs9ZzwfYy2GPcIaGicaGigXLDcbMAwX0zxjLzfjLy29YzhmGpsb0B3rHBfjLy29Yzhm7cIaGicaGigLMicH3AgvYzunSyxvZzsKGEWOGicaGicaGignVBNn0ignVDw50rMLSDgvYzwrrDwvYEsa9ig5LzwrZu3vICxvLCNKkicaGicaGicaGid8Gj1nftevdvcbdt1vovcGQksbHCYb0B3rHBcbguK9nicGNicSGyMfZzvf1zxj5icSGjYKGyMfZzv9XDwvYEsaNicSGD2HLCMvdBgf1C2ukicaGicaGicaGidOGj1nftevdvcbdt1vovcGQksbHCYb0B3rHBcbguK9nicCGkYb0AgLZlNjLywrtB3vYy2uGkYaNicCGkYb3AgvYzunSyxvZztSkicaGicaGicbJB25ZDcbJB3vUDezPBhrLCMvKuMvZDwX0id0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5kgnVDw50rMLSDgvYzwrrDwvYEsWGD2HLCMvqyxjHBxmUBgvUz3rOid4Gmca/ihDOzxjLugfYyw1ZidOGDw5KzwzPBMvKktSkicaGicaGicbMAwX0zxjLzfjLy29YzhmGpsbJB3vUDezPBhrLCMvKuMvZDwX0icyMignVDw50rMLSDgvYzwrszxn1BhrBmf0G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','jYWkicaGicaGicbJB25ZDhjHAw50CZOG','ifn1yM1VzhvSzsaTief1Dg8Tz2vUzxjHDgvKig9Uia','zgf0yxrHyMXLCW','zMLSDgvY','oWOGicaGicaGignVBNn0igLUDMfSAwrgAwvSzhmGpsbBxtSkcIaGicaGicaGlY8Gq2HLy2SGC2v0AwfWigzPzwXKigrHBgfTihnLBgvJDaOGicaGicaGigzVCIaOy29UC3qGzMLLBgqGB2yGCMvXlMjVzhKUC2vSzwn0ksb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxnPihvUDhvRigzPzwXKicDPzcCkicaGicaGicaGigLMicHMAwvSzc50B0XVD2vYq2fZzsGPid09psaNAwqNksb7cIaGicaGicaGicaGignVBNrPBNvLoWOGicaGicaGicaGFqOkicaGicaGicaGic8VifnRAxaGDMfSAwrHC2KGAMLRysbHzgeGu1fmigv4ChjLC3nPB24GzgvUz2fUiefticHHBgLHCYKkicaGicaGicaGigLMicGVxhmRyxnCCYTCDYSKl2KUDgvZDcHMAwvSzcKPihSkicaGicaGicaGicaGy29UDgLUDwu7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8Gu2TPCcb2ywXPzgfZAsbQAwTHigfKysbtuuWGB3bLCMf0B3jZl2z1BMn0Aw9UCYaOFhWSienptKnbvcWGzgXSkqOGicaGicaGicaGAwyGkc9CFfX8FenptKnbvhXdt0fmrvndrxXdqvnfFfDiru4VAs50zxn0kgzPzwXKksKGEWOGicaGicaGicaGicbJB250Aw51ztSkicaGicaGicaGih0kcIaGicaGicaGicaVlYbwywXPzgfZAsbUB3jTywWGzMLLBgqGBMfTzqOGicaGicaGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHMAwvSzcKPihSkicaGicaGicaGicaGAw52ywXPzezPzwXKCY5WDxnOkgzPzwXKktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGigLMicHPBNzHBgLKrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGC2vSzwn0igzPzwXKCYCScIaGicaGicaGicaGig1LC3nHz2u6igbjBNzHBgLKigzPzwXKkhmPoIaKE2LUDMfSAwrgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGicaGihnXBev4ChjLC3nPB25oB3rLoIaNu1fmigv4ChjLC3nPB25ZigrLBMDHBIbVCgvYyxrVCIb8FcbHDgf1ieftigfSAwfZigrPCgvYyM9SzwHRyw4NlaOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbhDw5HA2fUig1LDgHVzcbNzxrmB29RDxbeyxrHv2L0AezPBhrLCGOGicaGicbJB25ZDcbSAxn0id0GyxDHAxqG','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDJB25ZDhjHAw50ihzPB2XHDgLVBICPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj2jLBg93ig1PBMLTDw0NksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNq29UC3rYywLUDcb2Aw9SyxrPB24NlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbJB25MAwD1CMvKigzVCIbHzgP1C3rTzw50jYKGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNAxmGCMvXDwLYzwqGzM9YigfKANvZDcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGyMuGysbUB24TEMvYBYbUDw1IzxiNksb8FcbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGBM90igjLigvTChr5jYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uGpt09icDeyxrHihrPzgfRigrPDgvTDwTHBICGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNBM90igzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0rHDgeGBM90igzVDw5KjYWkicaGicaGicbTzxnZywDLoIaN','ksbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','j10GFhWGCMvXlMjVzhK7cIaGicbTyxn0zxjcB2r5wYC','jYWkicaGicaGicaGignVCNjLBgf0Aw9Uswq6ignVCNjLBgf0Aw9UswqkicaGicaGicb9cIaGicaGicKUy2f0y2GOzxjYid0+ignVBNnVBguUzxjYB3iOj1TlywzRyv0Gqxn5BMmGChvIBgLZAcbLCNjVCJONlcbLCNiUBwvZC2fNzsKPoWOGicaGFqO','oICSigvYCM9YktSkcIaGicaVlYbiyw5KBguGzM9YzwLNBIbRzxKGy29UC3rYywLUDcbLCNjVCNmkicaGigLMicHLCNjVCI5JB2rLid09psaNmJm1mdmNksb7ic8VifbVC3rNCMvtuuWGzM9YzwLNBIbRzxKGDMLVBgf0Aw9UcIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDgB3jLAwDUigTLEsbJB25ZDhjHAw50jYWkicaGicaGicbTzxnZywDLoIaNq2fUBM90igrLBgv0ztOGCMvJB3jKigLZihn0AwXSihjLzMvYzw5JzwqGyNKGB3rOzxiGzgf0ysCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigrLBgv0Aw5Nia','cNjVDxrLCI5WB3n0kcCVy2HHBMDLlxn0yxr1CYCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbYzxf1AxjLzcbMAwvSzhm6igLKl3bYAw1HCNKGA2v5igrHBIbZDgf0DxmkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','ChjPy2vgAwvSza','C291CMnL','D29YA2zSB3C','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8Gq1jfqvrflunptvbpu0LursaVifvqrefurs1dt01qt1njveu6igzVCMnLihnJB3bLignVBhvTBIbPBNnPzguGBwfZDgvYigjVzhKUcIaGlY8GtwfZDgvYigLZihDYyxbWzwqGyxqGCMvXlMjVzhLBCM9VDeTLEv07igrLDgfPBcbYB3DZigLUAgvYAxqGC2nVCguGDhjHBNnPDgL2zwX5cIaGlY8GDMLHig1HC3rLCIbVD25LCNnOAxaGkg5VigrPCMvJDcbZy29WzsbJB2X1Bw4GB24Gzgv0ywLSihrHyMXLks4kicbPzIaOzw5KCg9PBNqGpt09icDJCMvHDguTy29TCg9ZAxrLjYb8FcbLBMrWB2LUDca9pt0Gj3vWzgf0zs1JB21WB3nPDguNksb7cIaGicbJB25ZDcbTyxn0zxjcB2r5id0GCMvXlMjVzhLBjW','ksaMjIa','cI8VieDLBMvYyxrLzcbMCM9TihjLCxvLC3rty29WzsbJB25MAwD1CMf0Aw9UigLUihbHEwXVywqGsLnptGPYB3v0zxiUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGigLMicHYzxeUBwv0Ag9Kice9psaNue9tvcCPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIbUBYbHDxrOignVBNrLEhqGkgvUzhbVAw50ihDPDgHVDxqGyxv0AcbTAwrKBgv3yxjLkqOGigLMicGHCMvXlNvZzxiPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIb1C2vYigHHCYbIExbHC3mGCM9SzqOGignVBNn0ihvZzxjsB2XLCYa9ihjLCs51C2vYlNjVBgvZihX8ifTDoWOGignVBNn0igj5CgfZC1jVBgvZid0G','AwyGkgnHBgn1Bgf0Aw9UCY50B3rHBf9HBw91BNqPihSkicaGicaGicbJB25ZDcb0B3rHBefTB3vUDca9igfSBeL0zw1ZlNjLzhvJzsGOC3vTlcbPDgvTksa9pIb7cIaGicaGicaGicbJB25ZDcbXDhKGpsboDw1IzxiOAxrLBs4','cNjVDxrLCI5WB3n0kcCVy3jLyxrLlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','x21LDgfKyxrH','vwnMz0q','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','mJuZodCXogLNruLVBa','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbpDMvYCMLKzsbNzxrtDgf0AwnmB29RDxbeyxrHihvUDhvRig1LBMDNDw5HA2fUigTVBg9TicC','AM9PBG','zxHWB3j0','vxHjq1u','x2XVB2T1CenVBMzPzW','y29TCg9Uzw50CW','oICSigvYCM9YktSkcIaGicaVlYbtDgf0DxmGDhjHBNnPDgLVBIbUB3qGywXSB3DLzaOGicaGAwyGkgvYCM9YlNn0yxr1C0nVzguGpt09idqYmIb8FcbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDdyw5UB3qGy2HHBMDLihn0yxr1CYCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj05VihrYyw5ZAxrPB25ZigrLzMLUzwqNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mJiPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNu3rHDhvZihrYyw5ZAxrPB24GBM90igfSBg93zwqNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8Gq29Uy3vYCMvUDcbTB2rPzMLJyxrPB24Gkg9WDgLTAxn0AwmGy29Uy3vYCMvUy3KGy2HLy2SGDMLHihn0yxr1CYbNDwfYzcbJBgf1C2uPcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0Gj1DpuKTgte9xx0nptKnvuLjftLrFtu9esuzjq0fusu9ojYb8FcbLCNjVCI5ZDgf0DxndB2rLid09psa0mdKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0nVBMn1CNjLBNqGBw9KAwzPy2f0Aw9UjYWkicaGicaGicbTzxnZywDLoIbLCNjVCI5TzxnZywDLlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxrPB24GzxjYB3jZcIaGicbPzIaOzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNAxmGCMvXDwLYzwqGzM9YjYKGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNAxmGBM90igeGDMfSAwqGzMLLBgqNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbLCNjVCICScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbiB29Rigv4zwn1DgLVBIbMywLSzwqkicaGigLMicHLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDOB29RigzHAwXLzcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj29UqMvMB3jLjYKGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNB25bzNrLCICPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmIKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDxB3jRzMXVDYbOB29RigzHAwXLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbszwnVCMqGBM90igzVDw5KcIaGicbPzIaOzxjYB3iUBwvZC2fNzsa9pt0Gj1jLy29YzcbUB3qGzM91BMqNihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbMB3vUzcCPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGBwvZC2fNztOGjW','ie1VzgvSic0Gqxv0BY1Nzw5LCMf0zwqGB24G','igrHDgeGywrKzwqGC3vJy2vZC2z1BgX5oIaKE3jLC3bVBNnLrgf0ys4','ktSkicaGicaGicbUzxDeyxrHid0GCMvZCg9UC2veyxrHoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDifvqrefursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDifvqrefursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjxn5C3rLBsuIlcaIC2vUC2L0AxzLiJOGzMfSC2uGFqOGicaGicaGicaGicaGif0kicaGicaGicaGicaGFsWkicaGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','lMnYzwf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','jZSGlY8Gu291CMnLihvUDhvRig9WzxjHC2KGCMvHzcaOz2v0lcbSAxn0lcbSB29RDxaSigrHDgf0ywjSzxmPcIaGicb0AgLZlNDYAxrLu291CMnLid0GjW','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicaVlYbfEhrYywn0igHLywrLCIbKyxrHihnHAMeGkgv4y2X1zguGzgv0ywLSigfYCMf5ksb1BNr1AYb2ywXPzgf0Aw9UcIaGicaGignVBNn0igHLywrLCKrHDgfgB3jwywXPzgf0Aw9Uid0GEYaUlI5KyxrHih07cIaGicaGia','yLPRu2O','igrHDgeGC3vJy2vZC2z1BgX5igfKANvZDgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fKANvZDcbKyxrHia','jhT3AgvYzvjLC3vSDc5ZCwX9','yM9VBgvHBG','cIaGlYOQcIaGicOGtwvUzgfWyxrRyw4GzgvMAw5PC2KGzMLSDgvYihLHBMCGDgvYC2vKAwekicaGkIbaCMv0DxjUCYb7qxjYyxL9iezPBhrLCIb5yw5NihrLCNnLzgLHcIaGicOVcIaGz2v0qxzHAwXHyMXLrMLSDgvYCYGPihSkicaGihjLDhvYBIa','l3jLywqTy29TCg9ZAxrLic0GuMvHzcbOzwfKzxiGD2L0AcbKzxrHAwWGAxrLBxmkCM91DgvYlNbVC3qOjY9YzwfKlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','y29SDw1UrM9YBwf0CW','jYWkicaGicaGicbVChrPB25ZoIbVChrPB25ZlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih07cIaGicb9cGOGicaGCMv0DxjUihjLCY5QC29UkhjLC3vSDcK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUia','vKLqALa','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BgXjDgvTC1f1zxj5id0GyfnftevdvcaQiezst00GjhTKzxrHAwXuywjSzu5HBwv9ifDirvjficr7zM9YzwLNBKTLEx0GpsaKmsbpuKrfuIbcwsbSAw5Lx251BwjLCMa7cIaGicaGignVBNn0igfSBeL0zw1ZuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgfSBeL0zw1ZuxvLCNKSifTWCMLTyxj5s2v5vMfSDwvDktSkicaGicaGy29UC3qGywXSsxrLBxmGpsbHBgXjDgvTC1jLC3vSDc5YB3DZoWOkicaGicaGlY8GuMvJywXJDwXHDguGAgvHzgvYihrVDgfSCYbMCM9TigzPBMfSigL0zw1ZcIaGicaGia','jYaRihjLCs5WyxrOcIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifzHBgLKyxnPihnWzxnPzMLRihvUDhvRigvUzhbVAw50ihrLCNrLBNr1cIaGicaGignVBNn0igvUzhbVAw50id0GCMvXlNbHDgGUC3vIC3rYAw5NkdePoYaVlYbTzw5NAgfWDxmGlYbKAsbHD2fScGOGicaGicaVlYbfBMrWB2LUDcbNzxqGBwvTyNv0DwHRyw4GD2HLCMuGzgfSyw0GzM9YBwf0ihTRzxKSihzHBhvLFsbHDgf1ifT7A2v5lcb2ywX1zx1DicGXigvSzw1LBIKkicaGicaGAwyGkgvUzhbVAw50id09psaNzMLYC3qNksb7cIaGicaGicaGlY8GtM9YBwfSAxPLoIbHCNjHEsaXigvSzw1LBIaTpIbVyMPLy3qkicaGicaGicbPzIaOqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKGjIyGCMvXlMjVzhKUD2HLCMuUBgvUz3rOid09psaXksb7cIaGicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihjLCs5IB2r5lNDOzxjLwZbDoWOGicaGicaGih0kicaGicaGicbPzIaOixjLCs5IB2r5lNDOzxjLihX8ihr5CgvVzIbYzxeUyM9KEs53AgvYzsaHpt0Gj29IAMvJDcCGFhWGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicaGig1LC3nHz2u6icDxAgvYzsbTDxn0igjLigeGC2LUz2XLignVBMrPDgLVBIb7A2v5lcb2ywX1zx0NlaOGicaGicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaGicaGiNDOzxjLiJOGEYaIA2v5iJOGiMzPzwXKx25HBwuIlcaIDMfSDwuIoIaIzMLLBgrFDMfSDwuIih0ScIaGicaGicaGicaGicaGiNnLBgvJDci6ifSIzMLLBgqXiIWGiMzPzwXKmIjDcIaGicaGicaGicaGih0ScIaGicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGicb9ktSkicaGicaGicb9cIaGicaGicaGAwyGkhjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFhWGCMvXlMjVzhKUD2HLCMuUBg9NAwmPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicaGig1LC3nHz2u6icDbzhzHBMnLzcb3AgvYzsbMB3jTyxqGAxmGBM90ihn1ChbVCNrLzcbPBIaVzMLYC3qGzw5KCg9PBNqUifvZzsaVCMvHzcbLBMrWB2LUDcbMB3iGy29TCgXLEcbXDwvYAwvZjYWkicaGicaGicaGicaGzxHHBxbSztOGEWOGicaGicaGicaGicaGicj3AgvYzsi6ihSGiMTLEsi6icjMAwvSzf9Uyw1LiIWGiNzHBhvLiJOGiMzPzwXKx3zHBhvLiIb9cIaGicaGicaGicaGih0ScIaGicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGicb9ktSkicaGicaGicb9cIaGicaGih0kcIaGicaGic8VievUzhbVAw50igrLBgv0zsbTzw1IDxr1AgTHBIb3AgvYzqOGicaGicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNicyMicGHCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj0rftevursbWyxLSB2fKig11C3qGAw5JBhvKzsbHihDOzxjLihbYB3bLCNr5jYWkicaGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6icjPzciSicj2ywX1zsi6icj5B3vYlwLKlxzHBhvLiIb9xqOGicaGicaGicaGFsWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VievUzhbVAw50igfKzcbTzw1IDxr1AgTHBIbKyxrHihLHBMCGDMfSAwqkicaGicaGAwyGkgvUzhbVAw50id09psaNywrKjYKGEWOGicaGicaGic8ViezPBhrLCIbMAwvSzcb5yw5Nig1LBwLSAwTPigf1Dg9hzw5LCMf0zsbKyxjPihjLCxvPCMvKignOzwnRcIaGicaGicaGy29UC3qGyxv0B0DLBMvYyxrLrMLLBgrZid0G','jYWkicaGicaGicaGihvWDgLTztOGChjVy2vZCY51ChrPBwuOksWkicaGicaGicaGig1LBw9YEtOGChjVy2vZCY5Tzw1VCNLvC2fNzsGPlaOGicaGicaGicaGC3LZDgvToIb7cIaGicaGicaGicaGihbSyxrMB3jToIbWCM9JzxnZlNbSyxrMB3jTlaOGicaGicaGicaGicbUB2rLvMvYC2LVBJOGChjVy2vZCY52zxjZAw9UlaOGicaGicaGicaGicbWAwq6ihbYB2nLC3mUCgLKcIaGicaGicaGicb9cIaGicaGicaGFtSkcIaGicaGicaGCMvZlMPZB24OAgvHBhrOsw5MBYK7cIaGicaGih0PoWOkicaGicaGlY8Gu2vYDMLJzsbPBMzVigvUzhbVAw50cIaGicaGigfWCc5NzxqOjY9HCgKV','Bgv0igjHC2vrDwvYEsa9iga','DerJDxC','ihn0yxrPyYbSB29RDxaGCMvXDwvZDcb3AxrOihnLBgvJDgvKx3rHzZOGjhTZzwXLy3rLzfrHz31GktSkcIaGicaGic8ViePPA2eGywrHigzPzwXKihnLBgvJDcbHDgf1ihnVCNrFy29SDw1UCYWGz3vUywTHBIbNzxrmB29RDxbeyxrHv2L0AezPBhrLCIbKzw5Nyw4GyM9KEsb5yw5NigrPBw9KAwzPA2fZAqOGicaGicbPzIaOkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihX8icHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmGjIyGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmPksKGEWOGicaGicaGignVBNnVBguUBg9NkcDgB3vUzcbZzwXLy3qGzMLLBgrZig9YihnVCNrFy29SDw1UCYWGDxnPBMCGz2v0tg9VA3vWrgf0yvDPDgHgAwX0zxiNktSkcIaGicaGicaGlY8GqNvHDcbIB2r5igjHCNuGzgvUz2fUihDOzxjLigTVC29UzYb1BNr1AYbTzw5Nyw1IAwWGC2vTDweGzgf0yqOGicaGicaGignVBNn0ig1VzgLMAwvKqM9KEsa9ihSkicaGicaGicaGic4UlNjLCs5IB2r5laOGicaGicaGicaGD2HLCMu6ifTDic8VievTChr5ihDOzxjLihvUDhvRig1LBMDHBwjPBcbZzw11ysbKyxrHcIaGicaGicaGFtSkcIaGicaGicaGy29UC3qGBgLZDca9igf3ywL0ia','y29UC3rYywLUDhm','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','lMDLDerHDgeOEWOGicaGicaGicaGD2HLCMu6ifT7igTLEtOGzMLYC3rdB25KAxrPB24UA2v5lcb2ywX1ztOGzMLYC3rdB25KAxrPB24UDMfSDwuGFv0kicaGicaGicb9ktSkcIaGicaGicaGAwyGkcfLEgLZDgLUz0rHDgeUC3vJy2vZCYb8FcaHzxHPC3rPBMDeyxrHlMrHDgeGFhWGzxHPC3rPBMDeyxrHlMrHDgeUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicaGig1LC3nHz2u6icC','ycK7cG','ChzgyNy','lNzHBgLKyxrLrgf0ysHYzxeUyM9KEsWGj2LUC2vYDcCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8Gr3vUywTHBIbZyw5PDgL6zwqGzgf0yqOGicaGicbYzxeUyM9KEsa9ihSGlI4UCMvXlMjVzhKSic4UlNzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysb9oWOGicaGFqOkicaGic8Viev2zw50igXPzMvJEwnSzsb2yxjPywjSzxmkicaGigXLDcbVBgreyxrHid0GBNvSBdSkicaGigXLDcbUzxDeyxrHid0GBNvSBdSkicaGignVBNn0ihjLCxvLC3reyxrHid0GCMvXlMjVzhK7cIaGicbSzxqGCMvZCg9UC2veyxrHid0GBNvSBdSkcIaGicaVlYa9pt0Gsw50zwDYyxrLzcbuCMfUC2fJDgLVBIbKzw5Nyw4GrxzLBNqGtgLMzwn5y2XLid09pqOGicaGlY8GB25czwzVCMuGkYbTywLUig9WzxjHDgLVBIaRig9Uqwz0zxiGzgLLA3nLA3vZAsbKywXHBsbZyxr1ihrYyw5Zywn0Aw9UihnJB3bLcIaGicaVlYbKAsbKywXHBsbTB2rLBc5LEgvJDxrLvhjHBNnHy3rPB25xAxrOrxzLBNrZkcKkicaGigLMicHJB21WB25LBNrfBMDPBMuGjIyGq29UDgv4Dej1AwXKzxiPihSkicaGicaGlY8Gr3vUywTHBIbPBNrLz3jHDgvKihrYyw5Zywn0Aw9Uig1VzgvSigrLBMDHBIbLDMvUDcbSAwzLy3LJBgukicaGicaGDhj5ihSkicaGicaGicbJB25ZDcbLDMvUDenVBNrLEhqGpsb7cIaGicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicaGienVBNrLEhrcDwLSzgvYoIbdB250zxH0qNvPBgrLCIWkicaGicaGicaGihrHyMXLtMfTztOGjW','y3jLyxrLq29TCg9ZAxrL','oWOGicaG','Dw5PDf9WCMLJzq','lcbUDwXSlca','zgf0yxrHyMXLC1DOzxjL','iL0kicaGicaGicb9laOGicaGicaGigv4yw1WBgvFD2L0Af9VCMrLCMLUzZOGEWOGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','igXVB2T1CcbYzxf1zxn0oIbZzwfYy2G9jhTZzwfYy2H9lcbMAwX0zxjZpwaSigv4DhjHrMLSDgvYCYK7cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbSB29RDxaGzgf0ysbKzw5Nyw4GzMLSDgvYCYb0yw1IywHHBGOGicaGy29UC3qGBgLZDca9igf3ywL0ia','ywrQDxn0q29UzMLN','Dg90ywXFCxr5','zgf0yxrHyMXLC1f1zxj5','jZSkcIaGicaVlYbqyxjZzsbZB3j0x2nVBhvTBNmkicaGigXLDcbZB3j0x2nVBhvTBNmGpsbBxtSkicaGigLMicHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmGjIyGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmPicyMihjLCs5IB2r5lNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGihnVCNrFy29SDw1UCYa9ihjLCs5IB2r5lNnVCNrFy29SDw1UCY5TyxaOAxrLBsa9pIaOEWOGicaGicaGignVBhvTBJOGAxrLBs5JB2X1Bw4ScIaGicaGicaGzgLYzwn0Aw9UoIaOAxrLBs5KAxjLy3rPB24GFhWGj0ftqYCPlNrVvxbWzxjdyxnLkcKkicaGicaGFsKPoWOGicaGFqOkicaGic8VifbYB3nLCYbWyxjHBwv0zxiGD2HLCMuGzgvUz2fUigzVCM1HDcbHzhzHBMnLzcbJB25KAxrPB25ZcIaGicbSzxqGD2HLCMuGpsbUDwXSoWOGicaGAwyGkhjLCs5IB2r5lNDOzxjLicyMihr5CgvVzIbYzxeUyM9KEs53AgvYzsa9pt0Gj29IAMvJDcCPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPihX8icHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZicyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKPksb7cIaGicaGicaGD2HLCMuGpsbYzxeUyM9KEs53AgvYztSkicaGicaGFqOGicaGFqOkicaGic8VifbYB3nLCYbWyxjHBwv0zxiGC2vSzwn0ihvUDhvRigTVBg9TihnLBgvRDgLMcIaGicbJB25ZDcb2ywXPzezPzwXKCYa9ia','qxbLA1i','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zsa9icDxsevsrsaNicSGzMLSDgvYq2XHDxnLoWOGicaGicaGih0kicaGicaGFqOkicaGicaGlY8Gnc4GuhjVC2vZihbHCMfTzxrLCIb3AgvYzsbKzw5Nyw4GzM9YBwf0igfKDMfUy2vKignVBMrPDgLVBNmkicaGicaGBgv0ihDOzxjLugfYyw1Zid0Gw107cIaGicaGigLMicH3AgvYzsaMjIaOqxjYyxKUAxnbCNjHEsH3AgvYzsKGFhWGkhDOzxjLlMnVBMrPDgLVBNmGjIyGqxjYyxKUAxnbCNjHEsH3AgvYzs5JB25KAxrPB25ZksKPksb7cIaGicaGicaGDhj5ihSkicaGicaGicaGigXLDcbWyxjHBxmGpsbBxtSkicaGicaGicaGigXLDcbWyxjHBuLUzgv4id0GmtSkicaGicaGicaGignVBNn0ihDOzxjLuMvZDwX0id0GDgHPCY5IDwLSzenVBxbSzxHxAgvYzunSyxvZzsH3AgvYzsWGCgfYyw1ZlcbWyxjHBuLUzgv4ktSkicaGicaGicaGigLMicH3AgvYzvjLC3vSDc5ZCwWPihSkicaGicaGicaGicaGAwyGkhDOzxjLq2XHDxnLksb7cIaGicaGicaGicaGicaGD2HLCMvdBgf1C2uGkZ0GjYbbtKqGkcCGkYb3AgvYzvjLC3vSDc5ZCwWGkYaNksC7cIaGicaGicaGicaGih0GzwXZzsb7cIaGicaGicaGicaGicaGD2HLCMvdBgf1C2uGpsaNv0HfuKuGjYaRihDOzxjLuMvZDwX0lNnXBdSkicaGicaGicaGicaGFqOGicaGicaGicaGicb3AgvYzvbHCMfTCYa9ihDOzxjLuMvZDwX0lNbHCMfTCZSkicaGicaGicaGih0kicaGicaGicb9ignHDgnOicHLksb7cIaGicaGicaGicbJB25ZDcbLCNjVCIa9ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJB25KAxrPB25ZoIaNicSGzs5TzxnZywDLktSkicaGicaGicaGigvYCM9YlNn0yxr1C0nVzguGpsa0mda7cIaGicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGicb9cIaGicaGih0kcIaGicaGic8VienOzwnRigLMihf1zxj5ig5LzwrZihn1yNf1zxj5ihDYyxbW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','AxrLBxmU','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','rejItK4','iezst00GjhT0AgLZlNDYAxrLu291CMnLFsbxsevsrsaKE3DOzxjLq2XHDxnLFwa7cIaGicaGignVBNn0igHLywrLCLjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHOzwfKzxjrDwvYEsWGCgfYyw1ZktSkcIaGicaGigLMicHOzwfKzxjszxn1BhqUCM93CY5Szw5NDgGGpt09idaPihSkicaGicaGicb0AhjVDYbUzxCGrxjYB3iOj1jLy29YzcbUB3qGzM91BMqNktSkicaGicaGFqOkicaGicaGy29UC3qGAgvHzgvYuhjPBwfYEuTLEvzHBhvLid0GAgvHzgvYuMvZDwX0lNjVD3nBmf1BjW','cIaGicaGic8ViefKzcbZzwfYy2GGy29UzgL0Aw9UCYb1BNr1AYb0zxH0igzPzwXKCWOGicaGicbPzIaOC2vHCMnOicyMihnLyxjJAc50CMLTkcKPihSkicaGicaGicbJB25ZDcbZzwfYy2HdB25KAxrPB25Zid0GDgv4DezPzwXKCY5TyxaOzMLLBgqGpt4GEWOGicaGicaGicaGCMv0DxjUigb1ChbLCIHHlIr7zMLLBgr9ksbmsuTfihvWCgvYkcqKE3bHCMfTsw5KzxGRk30PydSkicaGicaGicb9ktSkicaGicaGicb3AgvYzunVBMrPDgLVBNmUChvZAcHGkcr7C2vHCMnOq29UzgL0Aw9UCY5QB2LUkcCGt1iGjYL9kwaPoWOkicaGicaGicaVlYbbzgqGC2vHCMnOihbHCMfTzxrLCIbMB3iGzwfJAcb0zxH0igzPzwXKcIaGicaGicaGDgv4DezPzwXKCY5MB3jfywnOkcGPid0+ihSkicaGicaGicaGihbHCMfTCY5WDxnOkgaLjhTZzwfYy2GUDhjPBsGPFsvGktSkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GqwrKigv4DhjHigzPBhrLCNmkicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOzxH0CMfgAwX0zxjZksKGEWOGicaGicaGigLMicH2ywX1zsaMjIa','jZSkicaGihrOAxmUCMvHzfnVDxjJzsa9icC','x2LK','id09psbZzwXLy3rLzfrHzYKGEWOGicaGicaGicaGCMvZDwX0lNnLBgvJDgvKid0Gj3rYDwuNoWOGicaGicaGih0kcIaGicaGicaGCMv0DxjUihjLC3vSDdSkicaGicaGFsK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrtDgf0AwnmB29RDxbeyxrHicG','igj1DcbJB21WB25LBNrZigfYzsbJB25MAwD1CMvKoMaSiguUBwvZC2fNzsK7cIaGicb0AhjVDYbLoWOGih0kicaVlYbkAwTHihrPzgfRigfKysbJB21WB25LBNrZlcbZAwXLBNqGC2TPCcb3ywPHCGOGignVBNnVBguUBg9NkgboBYbJB21WB25LBNqGzw5NAw5LihjLCxvPCMvKigzVCIa','l2rLBgv0zsaTie1LBMDOyxb1CYbKyxrHia','B2jQzwn0','l3jLywq6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbYzxf1zxn0igjVzhKkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VierLDgvRC2KGBw9KztOGCgfNAw5HC2KGkhbHz2uGzgLRAxjPBsKGyxrHDsbUB24TCgfNAw5HC2KGkhbHz2uGDgLKywSGzgLRAxjPBsKkicaGignVBNn0ihbHz2LUyxrLid0GCMvXlMjVzhKUCgfNzsaHpt0GDw5KzwzPBMvKoWOGicaGy29UC3qGCgfNzsa9ihbHz2LUyxrLid8GCgfYC2vjBNqOCMvXlMjVzhKUCgfNzsWGmtaPidOGBNvSBdSkicaGignVBNn0ihbLCLbHz2uGpsbWywDPBMf0zsa/ihbHCNnLsw50khjLCs5IB2r5lNbLCL9WywDLihX8ideWlcaXmcKGoIbUDwXSoWOGicaGy29UC3qGBgLTAxqGpsaHCgfNAw5HDguGpYbnyxrOlM1PBIHnyxrOlM1HEcHWyxjZzuLUDcHYzxeUyM9KEs5SAw1PDcb8FcaXmdaWlcaXmcKSidePlca1mdaWksa6ig51BgW7cIaGicbJB25ZDcbZzwfYy2HwywX1zsa9ihjLCs5IB2r5lNnLyxjJAf92ywX1zsb8FcaNjZSkicaGignVBNn0ihnLyxjJAej5id0GCMvXlMjVzhKUC2vHCMnOx2j5ihX8icC','iJOGEWOGicaGicaGicaGicaIzMLLBgqXiJOGiNzHBhvLmsiScIaGicaGicaGicaGicjMAwvSzdiIoIaIDMfSDwuYiIWkicaGicaGicaGicaGiG','mJaWnJG1nMzkDhzeAW','jZSkicaGicaGy29UC3qGDgv4DezPzwXKid0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0cIaGicaGicaGpYbSB29RDxbdB25MAwCUDgv4DezPzwXKcIaGicaGicaGoIb0zxH0rMLLBgrZwZbDoWOkicaGicaGBgv0ihf1zxj5id0GyfnftevdvcaKE2LKrMLLBgr9lcaKE3rLEhrgAwvSzh0GrLjptsaKE3rOAxmUz2v0tg9VA3vWu291CMnLkcL9ydSkicaGicaGAwyGkhDOzxjLq29UzgL0Aw9UCY5Szw5NDgGGpIaWksb7cIaGicaGicaGCxvLCNKGkZ0GycbxsevsrsaKE3DOzxjLq29UzgL0Aw9UCY5QB2LUkcCGqu5eicCPFwa7cIaGicaGih0kicaGicaGCxvLCNKGkZ0GycbpuKrfuIbcwsaKE2XVB2T1CenVBMzPzYaMjIbSB29RDxbdB25MAwCUAgfZq3vZDg9Tvgv4Dca/icCYjYa6icDHlICGkYb0zxH0rMLLBgrZwZbDFwa7cGOGicaGicbJB25ZB2XLlMXVzYGNpt09ierfqLvhierztKfnsumGte9ps1vqid09psCPoWOGicaGicbJB25ZB2XLlMXVzYGNuxvLCNK6jYWGCxvLCNKPoWOGicaGicbJB25ZB2XLlMXVzYGNugfYyw1ZoICSihbHCMfTCYK7cIaGicaGignVBNnVBguUBg9NkcDfEhrYysbMAwX0zxjZoICSigv4DhjHrMLSDgvYCYK7cIaGicaGignVBNnVBguUBg9NkcDmB29RDxaGy29UzMLNoICSigXVB2T1CenVBMzPzYK7cIaGicaGignVBNnVBguUBg9NkcC9pt0Gru5eierfqLvhid09psCPoWOkicaGicaGy29UC3qGzgf0ysa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHXDwvYEsWGCgfYyw1ZktSkcIaGicaGihjLDhvYBIbKyxrHlM1HCcHPDgvTid0+icH7cIaGicaGicaGAwq6igL0zw1BAwrgAwvSzf0GFhWGAxrLBs4','jZSkicaGigXLDcbYzxn1BhqGpsbUDwXSoWOkicaGic8Vid09psbjBNrLz3jHDgvKifrYyw5Zywn0Aw9UigrLBMDHBIbfDMvUDcbmAwzLy3LJBguGpt09cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','id0GjW','wu1Pu3q','C3rYAw5NAwz5','zMLSztO','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5ZDgf0DxndB2rLid09psa0mdaGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8cIaGicaGicaGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNsw52ywXPzcbHz2DYzwDHDguGzNvUy3rPB24Nksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0LUDMfSAwqGywXPyxmNksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj29UBhKGywXSB3DLzcb3AxrOienpvu5ujYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGzgvMAw5LzcbPBIbHz2DYzwDHDguGy29UzMLNjYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUBYbQB2LUigrLzMLUAxrPB25ZigzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigfNz3jLz2f0Aw5Nia','z2vUzxjHDgvK','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbdsefor0uTu1rbvfvtignVBxbSzxrLzcb3AxrOB3v0ignVBxbVBMvUDcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','jZSkcIaGicaGigzVCIaOy29UC3qGAxrLBsbVzIbKyxrHw2rLDgfPBeTLEv0GFhWGw10PihSkicaGicaGicaVlYbbzgqGzM9YzwLNBIbRzxKGDg8GAxrLBqOGicaGicaGigL0zw1BzM9YzwLNBKTLEv0GpsbTyxn0zxjqCMLTyxj5s2v5vMfSDwu7cGOGicaGicaGic8Vief1Dg8Tz2vUzxjHDguGvvvjrcb1BNr1AYbKzxrHAwWGueSGyMLSysbJBgLLBNqGDgLKywSGBwvUExvWCgX5lGOGicaGicaGic8VieTVBNnPC3rLBIbKzw5Nyw4GA29UDMvUC2KGyxv0B0DLBMvYyxrLk3bYAw1HCNLlzxKGzgKGC2LUz2XLlxrHyMXLcIaGicaGicaGlY8GkgXPAgf0ihzHBgLKyxrLrgf0ysKGzgfUihnLCMfNyw0GBgLUDgfZigrPywXLy3q6ihnLBxvHigDLBMvYyxrVCGOGicaGicaGic8Vig1LBwfRywKGDxvPzc52nYGPihnLAgLUz2DHigzVCM1HDcbvvuLeigrHBIb0AxrPAYbNzw5LCMfZAqOGicaGicaGic8VigLKzw50AwSSigLUzgvWzw5Kzw4GzgfYAsberuzbvuXuigv4ChjLC3nPB24GzgKGrermlGOGicaGicaGigLMicHPDgvTw2rLDgfPBfbYAw1HCNLlzxLDid09psb1BMrLzMLUzwqGFhWGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9pt0GBNvSBcKGEWOGicaGicaGicaGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9ihjLCxvPCMuOj3v1AwqNks52nYGPoWOGicaGicaGih0k','DgfIBgvoyw1L','psr7zgf0ys4','lYr7zw5KCg9PBNroyw1LFwa7cIaGicaGicaGicaGigfWCc51C2uOzw5KCg9PBNrqCMvMAxGSigvUzhbVAw50uM91DgvYktSkcIaGicaGicaGicaGigXVz0vUzhbVAw50uMvNAxn0zxjLzcHLBMrWB2LUDe5HBwuSigvUzhbVAw50uhjLzML4ktSkcIaGicaGicaGicaGic8VifjLz2LZDgvYigv4Cg9YDcbYB3v0zxmGDw50DwSGzw5KCg9PBNqGAw5PicHHDxrVlwrLDgvJDcbKyxjPigvTyMvKzgvKignVBMzPzYKkicaGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGicbJB25ZDcbLEhbVCNrdB25MAwCGpsbLEhrYywn0rxHWB3j0q29UzMLNrNjVBuvUzhbVAw50kgvUzhbVAw50ugf0AcK7cIaGicaGicaGicaGicaGAwyGkgv4Cg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGicaGrxHWB3j0sgfUzgXLCI5YzwDPC3rLCLjVDxrLCYHHChaSicC','ywDNCMvNyxrL','zgv0ywLSq29UzMLN','lMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','CMvWBgfJzq','cNjVDxrLCI5WB3n0kcCVDxbKyxrLlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','zMLLBgrmywjLBhm','B3DUDwK','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj2LUC2vYDcCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GtwvYz2uGC2fUAxrPEMvKigrHDgeGkhrLCM1HC3vRigHHC2GGCMvZDwX0ksbRzw1IywXPigTLigrHDgekicaGicaGt2jQzwn0lMfZC2LNBIHKyxrHlcb2ywXPzgf0Aw9UlNnHBML0AxPLzerHDgePoWOGicaGFqOkicaGia','laOGicaGicb1CgXVywrdB25MAwC6ia','cIaGicaGic8VierLzMf1BhqGC2nVCguGzMLSDgvYcIaGicaGihDOzxjLq29UzgL0Aw9UCY5WDxnOkga','kg1HC3rLCI1KzxrHAwWGDhjHBNnHy3rPB24P','cIaGicb9oWOkicaGignVBxbVBMvUDevUz2LUzs5SB2fKq29UzMLNDxjHDgLVBKzYB21pyMPLy3qOy29TCg9Uzw50q29UzMLNks50AgvUkhjLC3vSDca9pIb7cIaGicaGigLMicHYzxn1BhqUC3vJy2vZCYKGEWOGicaGicaGignVBNnVBguUBg9NkgbdB21WB25LBNqGy29UzMLNDxjHDgLVBIbSB2fKzwqGzM9Yia','iIWkicaGicaGicaGicaGicaIzgLYzwn0Aw9UiJOGiKftqYikicaGicaGicaGicaGFqOGicaGicaGicaGxqOGicaGicaGih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','jYWkicaGicaGicaGihbYAw1HCNLlzxK6ihrOAxmUChjPBwfYEuTLEsWkicaGicaGicaGic4UlIHLDMvUDenVBNrLEhqUywrKAxrPB25HBenVBNrLEhqGFhWGE30PcIaGicaGicaGFsK7cIaGicaGicaGy29UC3qGywz0zxjszxn1BhqGpsbHD2fPDcbJzs5LEgvJDxrLt25bzNrLCKnVBxbVC2L0zsGNDxbKyxrLjYWGywz0zxjdDhGPoWOGicaGicaGigLMicGHywz0zxjszxn1BhqUC3vJy2vZCYKGEWOGicaGicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkgbVBKfMDgvYq29TCg9ZAxrLvxbKyxrLigzHAwXLzdOGjhTHzNrLCLjLC3vSDc5LCNjVCN1GktSkicaGicaGicb9cIaGicaGih0kcIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNq09ntuLujYK7cIaGicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGicaVlYbjBNzHBgLKyxrLignHy2HLihnLDgvSywGGD3jPDguGB3bLCMf0Aw9UigjLCMHHC2LScIaGicaGigf3ywL0ihrOAxmUAw52ywXPzgf0zunHy2HLkcK7cGOGicaGicbYzxr1CM4GEWOGicaGicaGic4UlNvWzgf0zwrizwfKzxiScIaGicaGicaGw2rLDgfPBeTLEv06igfSBeL0zw1ZlaOGicaGicaGif9VCgvYyxrPB25ZoIb7cIaGicaGicaGicbKzwXLDgvKoIbKzwXLDgvKsxrLBxmUBgvUz3rOlaOGicaGicaGicaGDxbKyxrLzdOGDxbKyxrLzeL0zw1ZlMXLBMD0AcWkicaGicaGicaGigLUC2vYDgvKoIbPBNnLCNrLzeL0zw1ZlMXLBMD0AaOGicaGicaGih0kicaGicaGFtSkcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj1jpteXcqunljYK7cIaGicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUihvWzgf0zunVBxbVC2L0ztONlcbLCNjVCIK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFsbMAw5HBgX5ihSkicaGicaGy2XPzw50lNjLBgvHC2uOktSkicaGih0kicb9cG','zw5HyMXLza','cIaGicbJB25ZDcbHzgP1C3rdB25MAwCGpsa','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GtwvYz2uGC2fUAxrPEMvKigrHDgeGkhrLCM1HC3vRigHHC2GGCMvZDwX0ksbRzw1IywXPigTLigrHDgekicaGicaGt2jQzwn0lMfZC2LNBIHKyxrHlcb2ywXPzgf0Aw9UlNnHBML0AxPLzerHDgePoWOGicaGFqOkicaGia','iJOGEWOGicaGicaGicaGicaIzMLLBgqXiJOGiNzHBhvLmsiScIaGicaGicaGicaGicjMAwvSzdiIoIaIDMfSDwuYiGOGicaGicaGicaGFqOGicaGicaGih0','iezst00GjYaRihrOAxmUz2v0tg9VA3vWu291CMnLkcKGkYbGifDirvjfihvWCgvYkgeU','zMLSDgvYCW','igXPC3q6jYWGzxjYB3iPoWOGicaGy29UC3qGC3rHDhvZq29Kzsa9igvYCM9YlNn0yxr1C0nVzguGFhWGntaWoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOC3rHDhvZq29KzsKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGC3rHDhvZq29Kzsa9pt0GndaWid8Gj0jHzcbszxf1zxn0jYa6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIbZDgf0DxndB2rLid09psa0mdaGpYbLCNjVCI5TzxnZywDLidOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigzLDgnOAw5Nia','cIaQiezPzwXKCZOG','jZSkicaGicaGy29UC3qGzgv0ywLSuhjPBwfYEuTLEsa9icC','l2zPCNn0ic0GtwvUzgfWyxrRyw4Gzgf0ysa','cIaGicaVlYbhzxqGy29YCMvSyxrPB24GsuqGzNjVBsbOzwfKzxiGkg9WDgLVBMfSkqOGicaGy29UC3qGy29YCMvSyxrPB25jzca9ihjLCs5OzwfKzxjZwYD4lwnVCNjLBgf0Aw9UlwLKj10GFhWGBNvSBdSk','jYWkicaGicaGDgfIBgvoyw1LoIaN','ksbmsuTfihvWCgvYkcqXkq','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','nJG0ndvZEeH3y08','yxv0B0nHBgn1Bgf0zuzPzwXKCW','cGOGicaGicaVlYaTls0Gsg9VAZOGB25bzNrLCKnVBxbVC2L0zvvWzgf0zsaTls0kicaGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGicaGy29UC3qGEYbJB21WB25LBNrfBMDPBMu6ignLlcbdB250zxH0qNvPBgrLCJOGq0iGFsa9igv2zw50q29UDgv4DdSkicaGicaGicbJB25ZDcbHzNrLCKn0Eca9ienclMj1AwXKq29TCg9ZAxrLvxbKyxrLqwz0zxjdB250zxH0kgHLywrLCKrHDgeSig9SzerHDgeSihvWzgf0zwrizwfKzxiSihSkicaGicaGicaGigLUC2vYDgvKoIbPBNnLCNrLzeL0zw1ZlaOGicaGicaGicaGDxbKyxrLzdOGDxbKyxrLzeL0zw1ZlaOGicaGicaGicaGzgvSzxrLzdOGzgvSzxrLzeL0zw1ZcIaGicaGicaGFsWGEWOGicaGicaGicaGDgfIBgvoyw1LoIaN','laOGicaGicaGihrLEhq6igL0zw0U','cGOGicaGlY8GuMvWBgfJzsbHBNKGCMvTywLUAw5NihbSywnLAg9SzgvYCWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0ywjSzu5HBwvCFs9Nlcb0AgLZlNjLywrtB3vYy2uPoWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0AgLZxc50ywjSzvX9l2CSihrOAxmUCMvHzfnVDxjJzsK7cGOGicaGCMv0DxjUigjHC2vrDwvYEtS','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtksddOUkcRokaNsbTyxn0zxiGCMvJB3jKcIaGicbPzIaOCMvXlL9Yzxf1zxn0u2nVCguPihSkicaGicaGy29UC3qGC2nVCgvdAgvJAYa9igf3ywL0ia','CMvHza','oWOkicaGicaGicbJB25ZDcbYzxf1AxjLzezPzwXKCYa9ifSN','nJC4mdGXENnPvxzt','ywXS','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaXks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','icaGicaGjW','ksbMCM9TigfSBcbPDgvTCWOGicaGicbKyxrHlNrVDgfSx2fTB3vUDca9igrHDgeU','cIaGicaVlYbwywXPzgfZAsbKzxrHAwWGAxrLBxmGDw50DwSGBwfZDgvYlwrLDgfPBcaOB3bZAw9UywWGDw50DwSGDxbKyxrLkqOGicaGlY8Gvw50DwSGDxbKyxrLq29TCg9ZAxrLlcbKzxrHAwWGAxrLBxmGyMvYDxbHig9IAMvJDcbKzw5Nyw4GE2LUC2vYDdOGw10SihvWzgf0ztOGw10SigrLBgv0ztOGw119cIaGicbPzIaOzgf0ys4','cIaG','oWOkicaGignVBNn0ig1VzgvSsw5MBYa9igf3ywL0ia','DxbSB2fKq29UzMLN','x2v4DgvUzgvKrMLLBgrZ','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLyxjJAcaTieTHDgeGA3vUy2KGCgvUy2fYAwfUcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrmB29RDxbeyxrHkhnLyxjJAcKGEWOGicaGDhj5ihSkicaGicaGy29UC3qGCxvLCNKGpsaNu0vmrunuia','wvPZAgG','l3vWzgf0zs1JB21WB3nPDguGlsbdB21WB3nPDguGDxbKyxrLia','oWOGicaGicbJB25ZDcb0zxH0rMLLBgrZid0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5ZzwfYy2HgAwvSzhmUBgvUz3rOid4GmaOGicaGicaGid8GBg9VA3vWq29UzMLNlNnLyxjJAezPzwXKCWOGicaGicaGidOG','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjxn5C3rLBsuIlcaIC2vUC2L0AxzLiJOGzMfSC2uGFqOGicaGicaGicaGicbDcIaGicaGicaGicb9laOGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','iefqssCScIaGicaGicaGicbKzxnJCMLWDgLVBJOGj0f1Dg8Tz2vUzxjHDgvKiefqssbTB2r1BguGzM9Yia','D2HLCMvdBgf1C2uGpsbGv0HfuKuGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydS','zgvMyxvSDfnJB3bL','lY8GtM8Gywr2yw5JzwqGCxvLCMLLCYbKzwzPBMvK','y3jLyxrLzef0','iga7cIaGicaGicaGicbWyxjHBxmGpsb3AgvYzvjLC3vSDc5WyxjHBxm7cIaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbiyw5KBguGC29YDf9JB2X1Bw5ZigPPA2eGywrHcIaGicaGigLMicHVChrPB25ZlNnVCNrFy29SDw1UCYaMjIbbCNjHEs5PC0fYCMf5kg9WDgLVBNmUC29YDf9JB2X1Bw5ZksaMjIbVChrPB25ZlNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGicaGy29UC3qGB3jKzxjqyxj0CYa9ig9WDgLVBNmUC29YDf9JB2X1Bw5ZlM1HCcHPDgvTid0+ihSkicaGicaGicaGignVBNn0ignVBhvTBIa9igL0zw0Uy29SDw1UoWOGicaGicaGicaGy29UC3qGzgLYzwn0Aw9Uid0GkgL0zw0UzgLYzwn0Aw9UihX8icDbu0mNks50B1vWCgvYq2fZzsGPoWOGicaGicaGicaGAwyGkcfJB2X1Bw4PihjLDhvYBIbUDwXSoWOGicaGicaGicaGAwyGkcf0AgLZlNzHBgLKrMLLBgrZlMLUy2X1zgvZkgnVBhvTBIKGjIyGy29SDw1Uice9psaN','zM9YBxvSyq','cN0kcI8Viev4Cg9YDcbZAw5NBgv0B24GAw5ZDgfUy2ukBw9KDwXLlMv4Cg9YDhmGpsbUzxCG','cIaGicaGia','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGDxbKyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','lY8Grw5KCg9PBNqGl2LUzM8GzgLUB25HA3rPzMTHBIb2AweGywn0Aw9UlMLUzM8GpsbMywXZzq','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGBMv4DcGPoWP9ktSk','jZSkicaGicaG','cGOGicaGicbJB25ZDcbKzxrHAwXqCMLTyxj5s2v5id0GjW','nteWnu1Aq3jMyq','jYWGzw5KCg9PBNroyw1LlcbPBxbVCNrdB25MAwCPoWOGicaGicaGicaGicaGicaGBg9Nz2vYlMLUzM8OEWOGicaGicaGicaGicaGicaGicbLDMvUDdOGj2LTCg9YDf9YB3v0zxnFCMvNAxn0zxjLzcCScIaGicaGicaGicaGicaGicaGigvUzhbVAw50oIbLBMrWB2LUDe5HBwuScIaGicaGicaGicaGicaGicaGihrHyMXLoIbPBxbVCNrdB25MAwCUDgfIBgvoyw1LcIaGicaGicaGicaGicaGicb9lcbGsw1WB3j0ihjVDxrLCYbYzwDPC3rLCMvKigzVCIaKE2vUzhbVAw50tMfTzx1GktSkicaGicaGicaGicaGicb9cIaGicaGicaGicaGih0Gy2f0y2GGkgLTCg9YDevYCM9Yksb7cIaGicaGicaGicaGicaGBg9Nz2vYlMvYCM9YkhSkicaGicaGicaGicaGicaGigv2zw50oIaNAw1WB3j0x3jLz2LZDhjHDgLVBL9LCNjVCICScIaGicaGicaGicaGicaGicbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlaOGicaGicaGicaGicaGicaGzxjYB3i6igLTCg9YDevYCM9YlM1LC3nHz2ukicaGicaGicaGicaGicb9lcbGsw1WB3j0ihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhTPBxbVCNrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicaVlYbszwDPC3rLCIb1CgXVywqGCM91DgvZihvUDhvRigvUzhbVAw50igLUAsaOyxv0BY1KzxrLy3qGzgfYAsbLBwjLzgrLzcbJB25MAwCPcIaGicaGicaGicaGihrYEsb7cIaGicaGicaGicaGicaGy29UC3qGDxbSB2fKq29UzMLNid0GzxH0CMfJDfvWBg9HzenVBMzPz0zYB21fBMrWB2LUDcHLBMrWB2LUDfbHDgGPoWOGicaGicaGicaGicaGigLMicH1CgXVywrdB25MAwCPihSkicaGicaGicaGicaGicaGifvWBg9HzeHHBMrSzxiUCMvNAxn0zxjsB3v0zxmOyxbWlcaN','Dg9vChbLCKnHC2u','zMLLBgroyw1L','AhnzzeO','cIaGicOGqhbHCMfTihTpyMPLy3r9ig9WDgLVBNmGlsbrDwvYEsbVChrPB25ZcIaGicOGqhjLDhvYBNmGE3n0CMLUz30Gu1fmihf1zxj5igrHC2fYihvUDhvRia','ks4G','zhbir2C','zvDlr2u','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg1VzgLMAwvKqM9KEsK7cGOGicaGicaGignVBNnVBguUBg9NkgbtDgf0AwmGBg9VA3vWihDPDgGGC2vSzwn0l29YzgvYihjLC3vSDhm6icr7BgLZDc5Szw5NDgH9ihjLy29YzhmGzM91BMrGktSkicaGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGicaGignVDw50oIbSAxn0lMXLBMD0AcWkicaGicaGicaGigrHDge6igXPC3qScIaGicaGicaGicbZzwXLy3rLzfrHzZOGC2vSzwn0zwruywCScIaGicaGicaGicbXDwvYEtOGBw9KAwzPzwrcB2r5laOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFsbLBhnLihSkicaGicaGicaVlYbhDw5HA2fUig1VzgvSihvUDhvRig1LBMrHCgf0A2fUigrHDgeGzgvUz2fUig1LDgHVzcbSyw1HcIaGicaGicaGy29UC3qGBgLZDca9igf3ywL0ia','mteWmfL1D0nRCG'];a0_0x1b19=function(){return _0x56f4cc;};return a0_0x1b19();}function generateAdjustFunction(_0x26567b,_0x56284f,_0x19a92a,_0x5d71d7=null){const _0x14f28f=a0_0x18d6;if(!_0x5d71d7){const _0x3762e5=FileUtils[_0x14f28f(0x2df)](_0x56284f);_0x5d71d7=_0x3762e5+'Model';}const _0x212693=_0x19a92a['adjustConfig']?JSON['stringify'](_0x19a92a[_0x14f28f(0x23f)]):'{}',_0x40d120=_0x19a92a['fieldPolicy']?',\x20'+JSON[_0x14f28f(0x25d)](_0x19a92a[_0x14f28f(0x1b4)]):'',_0x18e105=_0x19a92a[_0x14f28f(0x1b4)]?_0x14f28f(0x23b)+JSON['stringify'](_0x19a92a[_0x14f28f(0x1b4)]):'',_0x5be8b4=_0x19a92a[_0x14f28f(0x2fb)]?_0x14f28f(0x30a)+_0x5d71d7+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x56284f+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return _0x14f28f(0x1e0)+_0x26567b+'/'+_0x56284f+_0x14f28f(0x1f7)+_0x56284f+_0x14f28f(0x2e1)+(_0x19a92a['primaryKey']||'id')+'\x27;\x0a\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20adjust`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20adjustments\x20array\x0a\x20\x20\x20\x20if\x20(!req.body.adjustments\x20||\x20!Array.isArray(req.body.adjustments)\x20||\x20req.body.adjustments.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27adjustments\x20array\x20is\x20required\x20and\x20must\x20not\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x5be8b4+_0x14f28f(0x275)+_0x212693+';\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x19a92a['tableName']+_0x14f28f(0x303)+_0x5d71d7+_0x14f28f(0x2d3)+_0x40d120+_0x14f28f(0x2fa)+_0x5d71d7+_0x14f28f(0x199)+_0x18e105+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x56284f+'\x20data\x20adjusted\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x56284f+_0x14f28f(0x223)+_0x56284f+_0x14f28f(0x202)+_0x56284f+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adjusting\x20'+_0x56284f+_0x14f28f(0x1ef);}function generateAggregateFunction(_0x4ef7e7,_0x688b64,_0x10740b,_0x3e9588=null){const _0x39d465=a0_0x18d6;if(!_0x3e9588){const _0x186912=FileUtils[_0x39d465(0x2df)](_0x688b64);_0x3e9588=_0x186912+'Model';}const _0x233072=_0x10740b[_0x39d465(0x1c6)]?JSON['stringify'](_0x10740b['aggregateConfig']):'{}';return _0x39d465(0x1e0)+_0x4ef7e7+'/'+_0x688b64+_0x39d465(0x1f5)+_0x233072+_0x39d465(0x2e5)+_0x3e9588+_0x39d465(0x195)+_0x688b64+_0x39d465(0x25f)+_0x688b64+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateDeleteFunction(_0x2d3e53,_0x3ab1c2,_0x33636f,_0x41f7a6=null,_0x239e5f=![]){const _0x5632ce=a0_0x18d6;if(!_0x41f7a6){const _0x5e1b0c=FileUtils['toCamelCase'](_0x3ab1c2);_0x41f7a6=_0x5e1b0c+'Model';}const _0x1c2b4e=_0x239e5f?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20DELETE\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabledDelete\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabledDelete\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.delete)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishDelete(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x2d3e53+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x3ab1c2+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x33636f[_0x5632ce(0x2c7)]||'id')+_0x5632ce(0x314)+_0x33636f[_0x5632ce(0x263)]+_0x5632ce(0x205):'',_0xeddcf9=_0x239e5f?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':_0x5632ce(0x27e);return _0x5632ce(0x1e0)+_0x2d3e53+'/'+_0x3ab1c2+_0x5632ce(0x254)+_0x3ab1c2+_0x5632ce(0x194)+_0x3ab1c2+_0x5632ce(0x30e)+_0xeddcf9+_0x5632ce(0x2d4)+_0x41f7a6+_0x5632ce(0x234)+_0x3ab1c2+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Simpan\x20data\x20untuk\x20event\x20lifecycle\x20dan\x20debug\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData\x20=\x20existingData.data[0];\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(checkError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Verification\x20Failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Could\x20not\x20verify\x20data\x20existence\x20before\x20delete\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20checkError.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x33636f['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x41f7a6+_0x5632ce(0x1f3)+_0x41f7a6+_0x5632ce(0x2e6)+_0x3ab1c2+_0x5632ce(0x2d0)+_0x1c2b4e+'\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menghapus\x20data\x20'+_0x3ab1c2+_0x5632ce(0x206)+_0x3ab1c2+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateFirstFunction(_0x2d1998,_0x509231,_0x3d5b86,_0x2b1612,_0x3ff567,_0x553274=null){const _0x50db51=a0_0x18d6;if(!_0x553274){const _0x35b333=FileUtils[_0x50db51(0x2df)](_0x509231);_0x553274=_0x35b333+_0x50db51(0x2d5);}const _0x6068c4=_0x3d5b86[_0x50db51(0x2fb)]?_0x50db51(0x318)+_0x509231+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return'\x0a//\x20POST\x20/api/'+_0x2d1998+'/'+_0x509231+_0x50db51(0x27d)+_0x509231+'\x20berdasarkan\x20kriteria\x0arouter.post(\x27/first\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x509231+_0x50db51(0x1fb)+(_0x3d5b86['primaryKey']||'id')+_0x50db51(0x1f4)+(_0x3d5b86['primaryKey']||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Tolak\x20format\x20advanced\x20(conditions/logic)\x0a\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where.key\x20ada\x20di\x20validFields\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON['stringify'](_0x3d5b86['fieldName']||[])+';\x0a\x20\x20\x20\x20if\x20(!validFields.includes(req.body.where.key))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field:\x20${req.body.where.key}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Convert\x20ke\x20array\x20format\x20untuk\x20kompatibilitas\x20dengan\x20model.getData()\x20->\x20buildComplexWhereClause()\x0a\x20\x20\x20\x20const\x20getPayload\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20req.body.where.key,\x20value:\x20req.body.where.value\x20}],\x0a\x20\x20\x20\x20\x20\x20select:\x20req.body.select\x0a\x20\x20\x20\x20};\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x553274+_0x50db51(0x1ed)+_0x6068c4+_0x50db51(0x1bc)+_0x509231+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20query:\x20req.body,\x0a\x20\x20\x20\x20\x20\x20\x20\x20resultCount:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mendapatkan\x20data\x20'+_0x509231+_0x50db51(0x2d7)+_0x509231+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateLookupFunction(_0x32a9e9,_0x2cfa12,_0x1bf8e6,_0x1aead3,_0x46865d,_0x2a760a=null){const _0x11c59c=a0_0x18d6,_0x989814={'bdfWr':'code','YZshh':_0x11c59c(0x1c9)};if(!_0x2a760a){const _0x1243aa=FileUtils['toCamelCase'](_0x2cfa12);_0x2a760a=_0x1243aa+'Model';}const _0x433882=_0x1bf8e6[_0x11c59c(0x218)]||null;return'\x0a//\x20GET\x20/api/'+_0x32a9e9+'/'+_0x2cfa12+'/lookup\x20-\x20Pencarian\x20'+_0x2cfa12+'\x20untuk\x20dropdown\x20(dynamic)\x0arouter.get(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20X-Request-Mode\x20header\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x20\x20\x20\x20console.log(`X-Request-Mode\x20header:\x20${requestMode}`);\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27dynamic\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20dynamic\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20\x27Contoh\x20penggunaan:\x20Tambahkan\x20header\x20X-Request-Mode:\x20dynamic\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Ambil\x20parameter\x20search\x20(default\x20case-insensitive)\x0a\x20\x20\x20\x20let\x20search\x20=\x20req.query.search\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20if\x20(Array.isArray(search))\x20{\x0a\x20\x20\x20\x20\x20\x20search\x20=\x20search[0]\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Ambil\x20parameter\x20tambahan\x20untuk\x20filtering\x0a\x20\x20\x20\x20const\x20companyId\x20=\x20req.query.company_id\x20||\x20req.query.companyId;\x0a\x20\x20\x20\x20const\x20extraFilters\x20=\x20{};\x0a\x0a\x20\x20\x20\x20//\x20Collect\x20additional\x20filter\x20parameters\x0a\x20\x20\x20\x20if\x20(companyId)\x20{\x0a\x20\x20\x20\x20\x20\x20extraFilters.company_id\x20=\x20companyId;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20search\x20parameter\x0a\x20\x20\x20\x20if\x20(search.length\x20>\x20100)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20search\x20parameter\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Search\x20parameter\x20terlalu\x20panjang\x20(max\x20100\x20karakter)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x2cfa12+_0x11c59c(0x23e)+_0x2a760a+'.getLookupDataDynamic(search,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20console.log(`Lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20search:\x20search,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x2cfa12+'\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20looking\x20up\x20'+_0x2cfa12+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a//\x20POST\x20/api/'+_0x32a9e9+'/'+_0x2cfa12+'/lookup\x20-\x20Mendapatkan\x20data\x20'+_0x2cfa12+'\x20untuk\x20lookup\x20dengan\x20filtering\x0arouter.post(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20X-Request-Mode\x20header\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x20\x20\x20\x20console.log(`X-Request-Mode\x20header\x20for\x20POST\x20lookup:\x20${requestMode}`);\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27static\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20static\x20for\x20POST\x20method\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20\x27Contoh\x20penggunaan:\x20Tambahkan\x20header\x20X-Request-Mode:\x20static\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Support\x20untuk\x20fieldNameLookup\x20config\x0a\x20\x20\x20\x20\x20\x20const\x20lookupConfig\x20=\x20'+JSON[_0x11c59c(0x25d)](_0x433882)+_0x11c59c(0x300)+_0x46865d+'\x22];\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22selected_tag\x22:\x20\x22optional-id-if-needed\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22'+(_0x1aead3[_0x11c59c(0x28b)]?_0x1aead3['all']['find'](_0x36cd27=>_0x36cd27!=='id')||'code':_0x989814['bdfWr'])+'\x22,\x20\x22value\x22:\x20\x22AP2506-01\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20defaultSelect\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_sql_expression:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0x46865d+'||\x27\x20-\x20\x27||code\x20as\x20display_text\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_custom_lookup:\x20lookupConfig\x20?\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[lookupConfig.idField,\x20lookupConfig.textField],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22note\x22:\x20\x22Using\x20fieldNameLookup\x20configuration\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20:\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x46865d+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%Portal%\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x46865d+_0x11c59c(0x299)+(_0x1aead3['textFields']?_0x1aead3[_0x11c59c(0x1a0)]['slice'](0x0,0x4)[_0x11c59c(0x215)](_0x989814['YZshh']):_0x1bf8e6[_0x11c59c(0x2ac)][_0x11c59c(0x2da)](0x0,0x4)['join'](_0x989814['YZshh']))+_0x11c59c(0x23d)+_0x46865d+_0x11c59c(0x1a4)+(_0x1bf8e6[_0x11c59c(0x2ac)][0x1]||_0x46865d)+_0x11c59c(0x30d)+_0x46865d+_0x11c59c(0x272)+_0x2cfa12+'/lookup:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20ada\x20where\x20clause\x20(format\x20baru)\x20atau\x20selected_tag\x20(format\x20lama)\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20baru\x20dengan\x20where\x20clause\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Using\x20new\x20format\x20with\x20where\x20clause\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0x1aead3['all']?_0x1aead3['all'][_0x11c59c(0x2f1)](_0xab8606=>_0xab8606!=='id')||_0x989814['bdfWr']:_0x989814[_0x11c59c(0x2f3)])+_0x11c59c(0x1fa)+_0x46865d+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x46865d+_0x11c59c(0x2cf)+_0x46865d+_0x11c59c(0x21e)+(_0x1aead3['textFields']?_0x1aead3['textFields']['slice'](0x0,0x4)['join']('\x22,\x20\x22'):_0x1bf8e6['fieldName'][_0x11c59c(0x2da)](0x0,0x4)['join'](_0x989814[_0x11c59c(0x296)]))+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x20(support\x20SQL\x20expressions)\x0a\x20\x20\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON['stringify'](_0x1bf8e6[_0x11c59c(0x2ac)]||[])+_0x11c59c(0x201)+_0x2a760a+'.getLookupDataWithFilter(req.body);\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Lookup\x20with\x20filter\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20query:\x20req.body,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20lama\x20atau\x20request\x20tanpa\x20WHERE\x20clause\x20tetapi\x20dengan\x20SELECT\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Using\x20legacy\x20format\x20with\x20selected_tag\x20or\x20select-only\x20request\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20selectedTag\x20=\x20req.body.selected_tag\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(`'+_0x2cfa12+_0x11c59c(0x231)+_0x2a760a+_0x11c59c(0x2b2)+_0x2a760a+_0x11c59c(0x2ee)+_0x2cfa12+'\x20static\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x2cfa12+_0x11c59c(0x1ef);}function generateReadFunction(_0x2abf90,_0x4487b5,_0x306754,_0x283299=null){const _0x3d1da4=a0_0x18d6;if(!_0x283299){const _0x971314=FileUtils['toCamelCase'](_0x4487b5);_0x283299=_0x971314+'Model';}return'\x0a//\x20POST\x20/api/'+_0x2abf90+'/'+_0x4487b5+'/read\x20-\x20Manual\x20pagination\x20endpoint\x0arouter.post(\x27/read\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x4487b5+_0x3d1da4(0x256)+(_0x306754[_0x3d1da4(0x2c7)]||_0x306754['fieldName'][0x0]||'id')+_0x3d1da4(0x242)+JSON[_0x3d1da4(0x25d)](_0x306754['fieldName']||[])+_0x3d1da4(0x301)+_0x283299+'.getList(options);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20response\x20berdasarkan\x20mode\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20Math.ceil(result.totalRecords\x20/\x20perPage);\x0a\x20\x20\x20\x20\x20\x20const\x20hasNext\x20=\x20page\x20<\x20totalPages;\x0a\x20\x20\x20\x20\x20\x20const\x20hasPrevious\x20=\x20page\x20>\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20pagination:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20current_page:\x20page,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20perPage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_records:\x20result.totalRecords\x20||\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_pages:\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_next:\x20hasNext,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_previous:\x20hasPrevious\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x4487b5+_0x3d1da4(0x27a)+_0x4487b5+_0x3d1da4(0x2c1);}function generateCreateCompositeFunction(_0x316c05,_0x5d0a65,_0x3fb295,_0xd0147b=null){const _0x5d2c37=a0_0x18d6,_0x3b80ce={'DaVpt':_0x5d2c37(0x270),'VIPjP':'\x20(with\x20detail\x20items)'};if(!_0xd0147b){const _0x21b3d7=FileUtils[_0x5d2c37(0x2df)](_0x5d0a65);_0xd0147b=_0x21b3d7+'Model';}const _0x5849cc=_0x3fb295['masterDetail']&&_0x3fb295['masterDetail'][_0x5d2c37(0x274)],_0x6b096d=_0x5849cc?_0x3fb295[_0x5d2c37(0x1d9)][_0x5d2c37(0x1b5)]:null,_0x458c85=_0x6b096d?_0x6b096d['split']('.')['pop']():'items',_0x561e37=_0x5d0a65['replace'](/-/g,'_'),_0x22e14b=_0x3fb295[_0x5d2c37(0x1d9)]?.[_0x5d2c37(0x267)]?.[_0x5d2c37(0x283)]?.[_0x5d2c37(0x1b9)]?.[_0x5d2c37(0x2a0)]||'',_0x159a5=_0x22e14b[_0x5d2c37(0x2bf)]('*')[_0x5d2c37(0x2fd)](_0x17f8a8=>_0x17f8a8[_0x5d2c37(0x1da)]()),_0x16270b=_0x3fb295['masterDetail']?.['headerCalculations']?.[_0x5d2c37(0x240)]?.[_0x5d2c37(0x209)]?.['replace'](_0x5d2c37(0x246),'')||'',_0x2a2dc4=_0x159a5[0x0]||_0x16270b,_0x3b6323=_0x159a5[0x1]||'unit_price';return'\x0a//\x20POST\x20/api/'+_0x316c05+'/'+_0x5d0a65+'/create-composite\x20-\x20Composite\x20create\x20'+(_0x5849cc?_0x3b80ce['DaVpt']:'')+_0x5d2c37(0x20f)+_0x5d0a65+_0x5d2c37(0x281)+_0x561e37+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20must\x20have\x20property\x20\x22'+_0x561e37+_0x5d2c37(0x315)+(_0x5849cc?'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x561e37+_0x5d2c37(0x257)+_0x458c85+_0x5d2c37(0x2f8):'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x561e37+_0x5d2c37(0x277))+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20data\x20=\x20req.body.'+_0x561e37+_0x5d2c37(0x1b8)+_0xd0147b+_0x5d2c37(0x221)+(_0x5849cc?'delete\x20headerDataForValidation.'+_0x458c85+';':'')+_0x5d2c37(0x1c2)+_0xd0147b+_0x5d2c37(0x26d)+(_0x5849cc?'\x0a\x20\x20\x20\x20//\x20Validasi\x20detail\x20items\x20untuk\x20master-detail\x0a\x20\x20\x20\x20if\x20(!data.'+_0x458c85+_0x5d2c37(0x310)+_0x458c85+')\x20||\x20data.'+_0x458c85+_0x5d2c37(0x268)+_0x458c85+'\x22\x20must\x20be\x20a\x20non-empty\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Auto-calculate\x20totals\x20jika\x20ada\x20konfigurasi\x0a\x20\x20\x20\x20'+(_0x3fb295[_0x5d2c37(0x1d9)][_0x5d2c37(0x2f7)]?_0x5d2c37(0x1d6)+JSON[_0x5d2c37(0x25d)](_0x3fb295['masterDetail']['headerCalculations'])+_0x5d2c37(0x304)+_0x458c85+'.length;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(headerCalc.total_qty\x20&&\x20headerCalc.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20headerCalc.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20data.total_qty\x20=\x20data.'+_0x458c85+_0x5d2c37(0x1e9)+(_0x2a2dc4?_0x5d2c37(0x192)+_0x2a2dc4+'\x20*\x20'+_0x3b6323+_0x5d2c37(0x28f)+_0x458c85+_0x5d2c37(0x2d6)+_0x2a2dc4+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0x3b6323+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20sum\x20+\x20(qty\x20*\x20price);\x0a\x20\x20\x20\x20\x20\x20},\x200);\x0a\x20\x20\x20\x20}':_0x5d2c37(0x1b1))+_0x5d2c37(0x317):'')+'\x0a\x0a\x20\x20\x20\x20console.log(\x27Calculated\x20totals:\x27,\x20{\x0a\x20\x20\x20\x20\x20\x20total_items:\x20data.total_items,\x0a\x20\x20\x20\x20\x20\x20total_qty:\x20data.total_qty,\x0a\x20\x20\x20\x20\x20\x20total_amount:\x20data.total_amount\x0a\x20\x20\x20\x20});\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x3fb295[_0x5d2c37(0x263)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x6b096d+_0x5d2c37(0x28d)+(_0x5849cc?_0x3fb295[_0x5d2c37(0x1d9)]['foreignKey']:'')+_0x5d2c37(0x1e1)+_0xd0147b+_0x5d2c37(0x21f)+_0x5d0a65+'\x20composite\x20create\x20successful`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(201).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x5d0a65+'\x20data\x20successfully\x20created'+(_0x5849cc?_0x3b80ce[_0x5d2c37(0x22a)]:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20create\x20'+_0x5d0a65+_0x5d2c37(0x24a)+_0x5d0a65+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateUpdateCompositeFunction(_0x450f53,_0x5c1fa5,_0x4ef984,_0x85f978=null){const _0x47915f=a0_0x18d6,_0x1850b9={'bZkSj':'items','pvFbv':_0x47915f(0x31a)};if(!_0x85f978){const _0x15bc34=FileUtils[_0x47915f(0x2df)](_0x5c1fa5);_0x85f978=_0x15bc34+'Model';}const _0x2de001=_0x4ef984['masterDetail']&&_0x4ef984['masterDetail']['enabled'],_0x34a720=_0x2de001?_0x4ef984[_0x47915f(0x1d9)][_0x47915f(0x1b5)]:null,_0x2d09e7=_0x34a720?_0x34a720['split']('.')[_0x47915f(0x19c)]():_0x1850b9[_0x47915f(0x222)],_0x41532b=_0x5c1fa5['replace'](/-/g,'_'),_0x1ba898=_0x4ef984[_0x47915f(0x2c7)]||'id',_0x3998ae=_0x4ef984[_0x47915f(0x2fb)]?_0x47915f(0x287)+_0x85f978+_0x47915f(0x233)+_0x1ba898+'\x27,\x20value:\x20data.'+_0x1ba898+'\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Master\x20record\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return'\x0a//\x20POST\x20/api/'+_0x450f53+'/'+_0x5c1fa5+_0x47915f(0x297)+(_0x2de001?'(master-detail\x20transaction)':'')+_0x47915f(0x26a)+_0x5c1fa5+'/update-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x20structure\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20!req.body.'+_0x41532b+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20must\x20have\x20property\x20\x22'+_0x41532b+'\x22\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20'+(_0x2de001?'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x41532b+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x1ba898+_0x47915f(0x1a7)+_0x2d09e7+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x41532b+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x1ba898+_0x47915f(0x1e6))+_0x47915f(0x1ce)+_0x41532b+_0x47915f(0x2b4)+_0x1ba898+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Primary\x20key\x20('+_0x1ba898+_0x47915f(0x203)+_0x3998ae+_0x47915f(0x1cb)+_0x85f978+_0x47915f(0x2c4)+(_0x2de001?_0x47915f(0x1ec)+_0x2d09e7+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x85f978+_0x47915f(0x276)+(_0x2de001?_0x47915f(0x290)+_0x2d09e7+_0x47915f(0x2e4)+_0x2d09e7+'\x20!==\x20\x27object\x27\x20||\x20Array.isArray(data.'+_0x2d09e7+'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x2d09e7+'\x22\x20must\x20be\x20an\x20object\x20with\x20structure\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20structure:\x20insert,\x20update,\x20delete\x20harus\x20array\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20operations\x20=\x20data.'+_0x2d09e7+_0x47915f(0x2f2)+_0x2d09e7+'.insert\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.update\x20&&\x20!Array.isArray(operations.update))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x2d09e7+'.update\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.delete\x20&&\x20!Array.isArray(operations.delete))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x2d09e7+_0x47915f(0x1fc):'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4ef984[_0x47915f(0x263)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x34a720+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+(_0x2de001?_0x4ef984[_0x47915f(0x1d9)][_0x47915f(0x305)]:'')+_0x47915f(0x2a3)+_0x85f978+_0x47915f(0x18f)+_0x5c1fa5+'\x20composite\x20update\x20successful:\x20'+_0x1ba898+_0x47915f(0x264)+_0x1ba898+'}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x5c1fa5+_0x47915f(0x302)+(_0x2de001?_0x1850b9[_0x47915f(0x236)]:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20update\x20'+_0x5c1fa5+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20\x22Data\x20tidak\x20ditemukan\x22\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x5c1fa5+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0x5c1fa5+_0x47915f(0x1ef);}function generateReadCompositeFunction(_0x587258,_0x28381d,_0x174ed8,_0x3ea791=null){const _0x59a47e=a0_0x18d6;if(!_0x3ea791){const _0x5e1f02=FileUtils[_0x59a47e(0x2df)](_0x28381d);_0x3ea791=_0x5e1f02+'Model';}const _0x24e6a0=JSON[_0x59a47e(0x25d)](_0x174ed8['fieldName']||[]);return _0x59a47e(0x1e0)+_0x587258+'/'+_0x28381d+_0x59a47e(0x227)+_0x28381d+_0x59a47e(0x1ca)+(_0x174ed8[_0x59a47e(0x2c7)]||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20model\x20readComposite\x20method\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x3ea791+_0x59a47e(0x2cd)+_0x28381d+'\x20composite\x20read\x20successful:\x20${result.count\x20||\x200}\x20record(s)`);\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20read\x20'+_0x28381d+':\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20reading\x20'+_0x28381d+_0x59a47e(0x312);}function generateWorkflowFunction(_0x322e60,_0x168570,_0x1699d5,_0x3839ec=null){const _0x332cc6=a0_0x18d6;if(!_0x3839ec){const _0x16538d=FileUtils['toCamelCase'](_0x168570);_0x3839ec=_0x16538d+_0x332cc6(0x2d5);}const _0x3bd264=_0x1699d5[_0x332cc6(0x20a)]?JSON[_0x332cc6(0x25d)](_0x1699d5['workflow']):'{}',_0x418852=_0x1699d5[_0x332cc6(0x2fb)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x3839ec+_0x332cc6(0x1df)+_0x168570+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return _0x332cc6(0x1e0)+_0x322e60+'/'+_0x168570+_0x332cc6(0x245)+_0x168570+_0x332cc6(0x207)+(_0x1699d5[_0x332cc6(0x2c7)]||'id')+_0x332cc6(0x1c0)+_0x418852+'\x0a\x20\x20\x20\x20const\x20workflowConfig\x20=\x20'+_0x3bd264+';\x0a\x20\x20\x20\x20workflowConfig._project\x20=\x20\x27'+_0x322e60+_0x332cc6(0x25a)+_0x1699d5[_0x332cc6(0x263)]+_0x332cc6(0x1e7)+_0x3839ec+'.changeStatusData(req.body,\x20workflowConfig,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20component\x20engine\x20events\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x3839ec+_0x332cc6(0x261)+_0x168570+'\x20status\x20changed:\x20${result.workflow.previousStatus}\x20→\x20${result.workflow.newStatus}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20`Status\x20changed\x20from\x20${result.workflow.previousStatus}\x20to\x20${result.workflow.newStatus}`,\x0a\x20\x20\x20\x20\x20\x20data:\x20result.data,\x0a\x20\x20\x20\x20\x20\x20workflow:\x20result.workflow,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20change-status\x20'+_0x168570+_0x332cc6(0x21a)+_0x168570+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Lock\x20acquisition\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27Failed\x20to\x20acquire\x20lock\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Resource\x20busy\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20changing\x20status\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a';}function createPostgresSubmoduleTemplate(_0x2fb1e3,_0x4c6301,_0xdf06f8){const _0x12aac3=a0_0x18d6,_0x4102d0={'CXogb':function(_0x2adeb8,_0x2cc0bc){return _0x2adeb8===_0x2cc0bc;},'dpHGg':_0x12aac3(0x1ab),'OmLrL':function(_0x34e69f,_0xba57de){return _0x34e69f(_0xba57de);},'UxICU':'\x27,\x20\x27','ApekR':function(_0x55c781,_0x5174e7,_0x2a872b){return _0x55c781(_0x5174e7,_0x2a872b);},'vwjaU':function(_0x431a72,_0x9bd3ce){return _0x431a72!==_0x9bd3ce;}},_0x5c072e=FileUtils['toPascalCase'](_0x4c6301),_0x1bbc2f=new Date()['toISOString']()[_0x12aac3(0x269)]('T','\x20')[_0x12aac3(0x269)](/\.\d{3}Z$/,''),_0x1165d1=_0xdf06f8[_0x12aac3(0x294)]||{'all':_0xdf06f8[_0x12aac3(0x2ac)]||[]},_0x23fa80=FileUtils[_0x12aac3(0x1cc)](_0xdf06f8[_0x12aac3(0x2ac)]||[]),_0x5e4752=FileUtils['toCamelCase'](_0x4c6301),_0x23762c=_0x5e4752+_0x12aac3(0x2d5),_0x3e887a=_0xdf06f8['kafka']&&_0x4102d0[_0x12aac3(0x2ca)](_0xdf06f8['kafka']['enabled'],!![]),_0x2692bd=buildEndpointFunctions(_0x2fb1e3,_0x4c6301,_0xdf06f8,_0x1165d1,_0x23fa80,_0x23762c,_0x3e887a),_0x3cd630=_0x3e887a?_0x12aac3(0x1ba)+JSON[_0x12aac3(0x25d)](_0xdf06f8['kafka']||{'enabled':![]})+';\x0a':'';return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x23762c+'\x20=\x20require(\x27../../models/'+_0x2fb1e3+'/'+_0x4c6301+'\x27);\x0a\x0a//\x20Issue\x20#13:\x20ekstrak\x20field\x20penyebab\x20konflik\x20dari\x20error\x20unique-violation\x20PostgreSQL.\x0a//\x20Mengembalikan\x20map\x20{\x20field:\x20[pesan]\x20}\x20atau\x20null\x20(call-site\x20meng-omit\x20`details`).\x0afunction\x20buildDuplicateDetails(error)\x20{\x0a\x20\x20if\x20(!error\x20||\x20typeof\x20error.detail\x20!==\x20\x27string\x27)\x20return\x20null;\x0a\x20\x20const\x20m\x20=\x20error.detail.match(/^Key\x20\x5c(([^)]+)\x5c)=/);\x0a\x20\x20if\x20(!m)\x20return\x20null;\x0a\x20\x20const\x20cols\x20=\x20m[1].split(\x27,\x27).map((c)\x20=>\x20c.trim().replace(/^\x22|\x22$/g,\x20\x27\x27)).filter(Boolean);\x0a\x20\x20if\x20(cols.length\x20===\x200)\x20return\x20null;\x0a\x20\x20const\x20msg\x20=\x20cols.length\x20>\x201\x0a\x20\x20\x20\x20?\x20\x27A\x20record\x20with\x20this\x20combination\x20of\x20values\x20already\x20exists\x27\x0a\x20\x20\x20\x20:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27;\x0a\x20\x20const\x20details\x20=\x20{};\x0a\x20\x20for\x20(const\x20c\x20of\x20cols)\x20details[c]\x20=\x20[msg];\x0a\x20\x20return\x20details;\x0a}\x0a'+_0x3cd630+_0x12aac3(0x2db)+JSON['stringify'](_0xdf06f8['components'])+'\x20&&\x20Array.isArray('+JSON['stringify'](_0xdf06f8['components'])+_0x12aac3(0x20c)+JSON[_0x12aac3(0x25d)](_0xdf06f8[_0x12aac3(0x219)])+'.length\x20>\x200;\x0a\x0a\x20\x20if\x20(hasComponents)\x20{\x0a\x20\x20\x20\x20componentEngine\x20=\x20require(\x27@restforgejs/platform/src/utils/component-engine\x27).componentEngine;\x0a\x20\x20\x20\x20ContextBuilder\x20=\x20require(\x27@restforgejs/platform/src/utils/context-builder\x27);\x0a\x0a\x20\x20\x20\x20//\x20Load\x20component\x20configuration\x20dari\x20payload\x20yang\x20sedang\x20digunakan\x0a\x20\x20\x20\x20const\x20componentConfig\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0xdf06f8[_0x12aac3(0x263)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20fieldName:\x20'+JSON['stringify'](_0xdf06f8['fieldName'])+',\x0a\x20\x20\x20\x20\x20\x20exportQuery:\x20'+(_0xdf06f8['exportQuery']?'\x27'+_0xdf06f8['exportQuery']+'\x27':_0x4102d0[_0x12aac3(0x2b0)])+_0x12aac3(0x2e7)+(_0xdf06f8[_0x12aac3(0x228)]?JSON[_0x12aac3(0x25d)](_0xdf06f8[_0x12aac3(0x228)]):'null')+',\x0a\x20\x20\x20\x20\x20\x20fieldLabels:\x20'+(_0xdf06f8[_0x12aac3(0x26b)]?JSON['stringify'](_0xdf06f8[_0x12aac3(0x26b)]):_0x12aac3(0x1ab))+',\x0a\x20\x20\x20\x20\x20\x20components:\x20'+JSON['stringify'](_0xdf06f8[_0x12aac3(0x219)])+',\x0a\x20\x20\x20\x20\x20\x20importConfig:\x20'+(_0xdf06f8[_0x12aac3(0x1ea)]?JSON[_0x12aac3(0x25d)](_0xdf06f8['importConfig']):'null')+',\x0a\x20\x20\x20\x20\x20\x20adjustConfig:\x20'+(_0xdf06f8['adjustConfig']?JSON[_0x12aac3(0x25d)](_0xdf06f8['adjustConfig']):_0x4102d0['dpHGg'])+',\x0a\x20\x20\x20\x20\x20\x20workflowConfig:\x20'+(_0xdf06f8['workflow']?JSON['stringify'](_0xdf06f8['workflow']):_0x4102d0['dpHGg'])+_0x12aac3(0x26e)+(_0xdf06f8[_0x12aac3(0x293)]?JSON[_0x12aac3(0x25d)](_0xdf06f8[_0x12aac3(0x293)]):_0x12aac3(0x1ab))+',\x0a\x20\x20\x20\x20\x20\x20requestScope:\x20'+(_0xdf06f8['requestScope']?JSON[_0x12aac3(0x25d)](_0xdf06f8['requestScope']):_0x4102d0['dpHGg'])+_0x12aac3(0x271)+_0x2fb1e3+'/'+_0x4c6301+_0x12aac3(0x2c9)+_0x2fb1e3+'/'+_0x4c6301+':`,\x20err.message);\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a}\x20catch\x20(e)\x20{\x0a\x20\x20if\x20(hasComponents)\x20{\x0a\x20\x20\x20\x20//\x20Components\x20dikonfigurasi\x20tapi\x20engine\x20gagal\x20load\x20—\x20ini\x20error,\x20bukan\x20optional\x0a\x20\x20\x20\x20console.error(`CRITICAL:\x20Component\x20engine\x20failed\x20to\x20load\x20for\x20'+_0x2fb1e3+'/'+_0x4c6301+_0x12aac3(0x253)+_0x2fb1e3+'/'+_0x4c6301+',\x20running\x20without\x20events`);\x0a}\x0a\x0a/**\x0a\x20*\x20'+_0x5c072e+_0x12aac3(0x1fe)+_0x1bbc2f+'\x0a\x20*\x0a\x20*\x20Endpoints\x20untuk\x20'+_0x4c6301+'\x20dengan\x20actions:\x20'+_0x4102d0['OmLrL'](getEnabledActions,_0xdf06f8)[_0x12aac3(0x215)](',\x20')+_0x12aac3(0x19f)+_0xdf06f8[_0x12aac3(0x263)]+'\x0a\x20*\x20Fields:\x20'+(_0xdf06f8['fieldName']?_0xdf06f8['fieldName']['length']:0x0)+_0x12aac3(0x2d1)+_0x2fb1e3+'/'+_0x4c6301+_0x12aac3(0x22d)+(_0xdf06f8['fieldValidation']?JSON['stringify'](_0xdf06f8[_0x12aac3(0x2f4)][_0x12aac3(0x200)](_0x546e06=>_0x546e06[_0x12aac3(0x232)]&&_0x546e06[_0x12aac3(0x232)]['autoGenerate'])[_0x12aac3(0x2fd)](_0x25c80c=>_0x25c80c['name'])):'[]')+_0x12aac3(0x289)+_0xdf06f8[_0x12aac3(0x2ac)][_0x12aac3(0x200)](_0x3bb927=>_0x3bb927!=='id')['slice'](0x0,0x1)['join'](_0x4102d0[_0x12aac3(0x217)])+'\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20.filter(field\x20=>\x20!autoGenerateFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20missingFields\x20=\x20requiredFields.filter(field\x20=>\x20!req.body[field]\x20||\x20req.body[field]\x20===\x20\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(missingFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Required\x20field(s):\x20${missingFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20update\x20membutuhkan\x20primary\x20key\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27update\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0xdf06f8['primaryKey']||'id')+'\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20payload\x20for\x20${req.path}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20next();\x0a});\x0a'+_0x4102d0[_0x12aac3(0x243)](buildRequestScopeMiddleware,_0xdf06f8,_0x4c6301)+'\x0a'+_0x2692bd+'\x0a\x0a'+(_0xdf06f8[_0x12aac3(0x2b9)]?.['info']!==![]?_0x12aac3(0x319)+JSON['stringify']({'datatables':!!_0xdf06f8[_0x12aac3(0x2b9)]?.[_0x12aac3(0x1ff)],'read':!!_0xdf06f8[_0x12aac3(0x2b9)]?.['read'],'first':!!_0xdf06f8[_0x12aac3(0x2b9)]?.['first'],'create':!!_0xdf06f8['action']?.[_0x12aac3(0x2c2)],'update':!!_0xdf06f8[_0x12aac3(0x2b9)]?.['update'],'delete':!!_0xdf06f8['action']?.['delete'],'lookup':!!_0xdf06f8['action']?.[_0x12aac3(0x1d2)],'export':!!_0xdf06f8[_0x12aac3(0x2b9)]?.[_0x12aac3(0x216)],'import':!!_0xdf06f8['action']?.[_0x12aac3(0x316)],'workflow':!!_0xdf06f8[_0x12aac3(0x2b9)]?.['workflow'],'info':_0x4102d0['vwjaU'](_0xdf06f8['action']?.[_0x12aac3(0x1ac)],![])})+_0x12aac3(0x292)+_0x23762c+_0x12aac3(0x2fc)+_0x4c6301+'\x27,\x0a\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x2fb1e3+'\x27,\x0a\x20\x20\x20\x20\x20\x20table:\x20modelInfo.table,\x0a\x20\x20\x20\x20\x20\x20fields:\x20modelInfo.fields,\x0a\x20\x20\x20\x20\x20\x20querySources:\x20modelInfo.querySources,\x0a\x20\x20\x20\x20\x20\x20actions:\x20actions,\x0a\x20\x20\x20\x20\x20\x20databaseType:\x20\x27postgres\x27,\x0a\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x1bbc2f+'\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x4c6301+_0x12aac3(0x30b):_0x12aac3(0x2a5))+'\x0a\x0a//\x20Health\x20check\x20endpoint\x0arouter.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20res.json({\x0a\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20endpoint:\x20\x27'+_0x4c6301+'\x27,\x0a\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20});\x0a});\x0a\x0amodule.exports\x20=\x20router;';}function createPostgresMainModuleTemplate(_0x15e68b){const _0x3a18ac=a0_0x18d6,_0x4f8db3=FileUtils['toPascalCase'](_0x15e68b),_0x4915a6=FileUtils[_0x3a18ac(0x2df)](_0x15e68b),_0x4cbe72=new Date()['toISOString']()[_0x3a18ac(0x269)]('T','\x20')['replace'](/\.\d{3}Z$/,'');return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20bodyParser\x20=\x20require(\x27body-parser\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0aconst\x20{\x20logger,\x20logServerReady,\x20logEndpointRegistered,\x20createRequestLogger,\x20logRequest\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/logger\x27);\x0aconst\x20ExportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/export_handler\x27);\x0aconst\x20ImportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/import_handler\x27);\x0aconst\x20UploadHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/upload_handler\x27);\x0aconst\x20{\x20extractExportConfigFromEndpoint,\x20extractImportConfigFromEndpoint,\x20extractUploadConfigFromEndpoint\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/config-extractor\x27);\x0aconst\x20rateLimiter\x20=\x20require(\x27@restforgejs/platform/src/middleware/rate-limiter\x27);\x0aconst\x20idempotencyMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/idempotency\x27);\x0aconst\x20bodyOptionsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/body-options\x27);\x0aconst\x20corsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/cors\x27);\x0aconst\x20securityHeaders\x20=\x20require(\x27@restforgejs/platform/src/middleware/security-headers\x27);\x0a\x0a/**\x0a\x20*\x20'+_0x4f8db3+_0x3a18ac(0x2fe)+_0x4cbe72+_0x3a18ac(0x30f)+_0x15e68b+_0x3a18ac(0x1de)+_0x4f8db3+_0x3a18ac(0x309)+_0x15e68b+_0x3a18ac(0x2c8)+_0x15e68b+_0x3a18ac(0x2ba)+_0x15e68b+'/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x15e68b+_0x3a18ac(0x22e)+_0x15e68b+_0x3a18ac(0x1e2)+_0x4f8db3+_0x3a18ac(0x29a)+_0x15e68b+_0x3a18ac(0x2bd)+_0x4cbe72+'\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Load\x20dan\x20register\x20endpoint\x20modules\x0a\x20\x20\x20\x20\x20\x20//\x20Binary-compatible:\x20Use\x20working\x20directory\x20instead\x20of\x20__dirname\x0a\x20\x20\x20\x20\x20\x20const\x20isBunCompiled\x20=\x20typeof\x20Bun\x20!==\x20\x27undefined\x27\x20&&\x20!process.argv[1];\x0a\x20\x20\x20\x20\x20\x20const\x20getWorkingDir\x20=\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20running\x20as\x20compiled\x20binary\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isBunCompiled)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Running\x20as\x20compiled\x20binary:\x20use\x20directory\x20where\x20binary\x20is\x20located\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20path.dirname(process.execPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Running\x20as\x20Node.js/Bun\x20script:\x20__dirname\x20is\x20already\x20in\x20src/modules\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20So\x20we\x20just\x20need\x20to\x20add\x20the\x20module\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20__dirname;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20workingDir\x20=\x20getWorkingDir();\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20compiled\x20binary:\x20workingDir\x20is\x20binary\x20directory,\x20need\x20full\x20path\x20src/modules/moduleName\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20script:\x20workingDir\x20is\x20already\x20src/modules/,\x20just\x20add\x20moduleName\x0a\x20\x20\x20\x20\x20\x20const\x20modulesDir\x20=\x20isBunCompiled\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20path.join(workingDir,\x20\x27src\x27,\x20\x27modules\x27,\x20\x27'+_0x15e68b+_0x3a18ac(0x31d)+_0x15e68b+_0x3a18ac(0x1f1)+_0x15e68b+_0x3a18ac(0x265)+_0x15e68b+'\x27,\x20endpointName,\x20exportConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(exportError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27export_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20exportError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Export\x20registration\x20failed\x20for\x20${endpointName}:\x20${exportError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20import\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20importConfig\x20=\x20extractImportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(importConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ImportHandler.registerRoutes(app,\x20\x27'+_0x15e68b+_0x3a18ac(0x2aa)+_0x15e68b+'\x27,\x20endpointName,\x20uploadConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields:\x20Object.keys(uploadConfig.fields\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(uploadError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20uploadError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20registration\x20failed\x20for\x20${endpointName}:\x20${uploadError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(endpointError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20endpoint\x20${file}:`,\x20endpointError.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Continue\x20loading\x20other\x20endpoints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(dirError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20reading\x20modules\x20directory\x20${modulesDir}:`,\x20dirError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20cleanup\x20route\x20(optional\x20admin\x20endpoint)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27cleanup_route_error\x27,\x20error:\x20cleanupError.message\x20},\x20\x27Export\x20cleanup\x20route\x20registration\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20root\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20404\x20handler\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20workbench\x20UI\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20404\x20handler\x20untuk\x20unknown\x20routes\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Global\x20Error\x20Handler\x20-\x20${req.method}\x20${req.url}:`,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20other\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20statusCode\x20=\x20err.statusCode\x20||\x20err.status\x20||\x20500;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20errorResponse\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20err.name\x20||\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20err.message\x20||\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20stack\x20trace\x20in\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20!==\x20\x27production\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errorResponse.stack\x20=\x20err.stack;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(statusCode).json(errorResponse);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Start\x20server\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x15e68b+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20healthCheck:\x20`http://${displayHost}:${port}/api/'+_0x15e68b+_0x3a18ac(0x2c5)+_0x15e68b+'/info`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseUrl:\x20`http://${displayHost}:${port}`\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Execute\x20plugin\x20onAfterServerStart\x20hook\x20(jika\x20ada)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin\x20&&\x20plugin.onAfterServerStart)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onAfterServerStart(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_after_start_error\x27,\x20error:\x20pluginError.message\x20},\x20\x27Plugin\x20onAfterServerStart\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Graceful\x20shutdown\x20handling\x0a\x20\x20\x20\x20\x20\x20const\x20gracefulShutdown\x20=\x20(signal)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`\x5cnReceived\x20${signal},\x20starting\x20graceful\x20shutdown...`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20server.close((err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20during\x20server\x20shutdown:\x27,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Server\x20closed\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Goodbye!\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Force\x20shutdown\x20after\x2010\x20seconds\x0a\x20\x20\x20\x20\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Forced\x20shutdown\x20after\x20timeout\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x2010000);\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20shutdown\x20signals\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGINT\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGINT\x27));\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGTERM\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGTERM\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20uncaught\x20exceptions\x0a\x20\x20\x20\x20\x20\x20process.on(\x27uncaughtException\x27,\x20(error)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Uncaught\x20Exception:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27uncaughtException\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20process.on(\x27unhandledRejection\x27,\x20(reason,\x20promise)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Unhandled\x20Rejection\x20at:\x27,\x20promise,\x20\x27reason:\x27,\x20reason);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27unhandledRejection\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Store\x20server\x20reference\x20untuk\x20testing/management\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onServerReady\x20&&\x20typeof\x20config.onServerReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onServerReady(server,\x20app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Fatal\x20error\x20in\x20${moduleNameCapitalized}\x20module:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20reject(error);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Promise\x20tidak\x20akan\x20pernah\x20resolve\x20untuk\x20menjaga\x20server\x20tetap\x20berjalan\x0a\x20\x20\x20\x20//\x20kecuali\x20ada\x20error\x20atau\x20shutdown\x20signal\x0a\x20\x20});\x0a}\x0a\x0a//\x20Export\x20execute\x20function\x0amodule.exports\x20=\x20{\x20execute\x20};\x0a\x0a//\x20Additional\x20exports\x20untuk\x20testing\x20dan\x20management\x0amodule.exports.'+_0x4915a6+'\x20=\x20{\x20execute\x20};\x0amodule.exports.moduleName\x20=\x20\x27'+_0x15e68b+'\x27;\x0amodule.exports.generated\x20=\x20\x27'+_0x4cbe72+'\x27;';}module['exports']={'createPostgresModelTemplate':createPostgresModelTemplate,'createPostgresSubmoduleTemplate':createPostgresSubmoduleTemplate,'createPostgresMainModuleTemplate':createPostgresMainModuleTemplate};
1
+ const a0_0x25cec5=a0_0x4311;(function(_0x541564,_0x2a2113){const _0x3e7551=a0_0x4311,_0x48f546=_0x541564();while(!![]){try{const _0x2e0735=-parseInt(_0x3e7551(0x132))/0x1*(-parseInt(_0x3e7551(0xb2))/0x2)+-parseInt(_0x3e7551(0x18d))/0x3*(-parseInt(_0x3e7551(0x16c))/0x4)+parseInt(_0x3e7551(0x16f))/0x5+-parseInt(_0x3e7551(0xf9))/0x6*(-parseInt(_0x3e7551(0x19c))/0x7)+parseInt(_0x3e7551(0x259))/0x8*(parseInt(_0x3e7551(0x19f))/0x9)+-parseInt(_0x3e7551(0x141))/0xa+-parseInt(_0x3e7551(0xfa))/0xb;if(_0x2e0735===_0x2a2113)break;else _0x48f546['push'](_0x48f546['shift']());}catch(_0x554831){_0x48f546['push'](_0x48f546['shift']());}}}(a0_0x2b77,0xdcb9e));function a0_0x4311(_0x3d4132,_0x13cfd8){_0x3d4132=_0x3d4132-0xa4;const _0x2b7708=a0_0x2b77();let _0x4311cd=_0x2b7708[_0x3d4132];if(a0_0x4311['pRbVHU']===undefined){var _0x3d40d8=function(_0x581bb4){const _0x513b2f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x441365='',_0x5e19f1='';for(let _0x5c2cdb=0x0,_0xc2cfc7,_0x52c62c,_0x26581e=0x0;_0x52c62c=_0x581bb4['charAt'](_0x26581e++);~_0x52c62c&&(_0xc2cfc7=_0x5c2cdb%0x4?_0xc2cfc7*0x40+_0x52c62c:_0x52c62c,_0x5c2cdb++%0x4)?_0x441365+=String['fromCharCode'](0xff&_0xc2cfc7>>(-0x2*_0x5c2cdb&0x6)):0x0){_0x52c62c=_0x513b2f['indexOf'](_0x52c62c);}for(let _0x371847=0x0,_0x402a97=_0x441365['length'];_0x371847<_0x402a97;_0x371847++){_0x5e19f1+='%'+('00'+_0x441365['charCodeAt'](_0x371847)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5e19f1);};a0_0x4311['XinOkl']=_0x3d40d8,a0_0x4311['bXqhgW']={},a0_0x4311['pRbVHU']=!![];}const _0x280e1d=_0x2b7708[0x0],_0x81974c=_0x3d4132+_0x280e1d,_0x29907e=a0_0x4311['bXqhgW'][_0x81974c];return!_0x29907e?(_0x4311cd=a0_0x4311['XinOkl'](_0x4311cd),a0_0x4311['bXqhgW'][_0x81974c]=_0x4311cd):_0x4311cd=_0x29907e,_0x4311cd;}const FileUtils=require('../utils/file-utils'),{IS_DELETED_COLUMN,DELETED_AT_COLUMN,DELETED_BY_COLUMN,SOFT_DELETE_COLUMNS,isSoftDeleteEnabled}=require(a0_0x25cec5(0x12b));function softDeleteVisibilityFilter(_0xb69de1){const _0x3101e7=a0_0x25cec5,_0x54a7e8={'Ybzge':'active_only','HOmFp':'include_deleted','rgrzZ':function(_0x2b11f5,_0x4b91e9){return _0x2b11f5===_0x4b91e9;}};if(!isSoftDeleteEnabled(_0xb69de1))return null;const _0x5f2bb7=_0xb69de1['softDelete']&&_0xb69de1['softDelete']['visibility']||_0x54a7e8[_0x3101e7(0x1c0)];if(_0x5f2bb7===_0x54a7e8[_0x3101e7(0x200)])return null;return _0x54a7e8[_0x3101e7(0x19e)](_0x5f2bb7,'deleted_only')?_0x3101e7(0x26a):_0x3101e7(0x20a);}function assertNoFileReferenceLeftover(_0x32d88f){const _0xb007c2=a0_0x25cec5,_0x381aa1={'aftKK':_0xb007c2(0x1f8),'VVUxp':'masterDetail.detailConfig.detailQuery','GmKlp':function(_0x1d147d,_0x306bca){return _0x1d147d===_0x306bca;},'aDoBK':_0xb007c2(0x241),'xeYcZ':function(_0x15dcd4,_0x2bed5b){return _0x15dcd4+_0x2bed5b;}},_0x4b820a=[[_0xb007c2(0x275),_0x32d88f['datatablesQuery']],[_0x381aa1['aftKK'],_0x32d88f[_0xb007c2(0x1f8)]],[_0x381aa1['VVUxp'],_0x32d88f['masterDetail']&&_0x32d88f['masterDetail']['detailConfig']&&_0x32d88f['masterDetail'][_0xb007c2(0x1bc)][_0xb007c2(0x27d)]]];for(const [_0x158869,_0x392a8b]of _0x4b820a){if(_0x381aa1[_0xb007c2(0xaa)](typeof _0x392a8b,_0x381aa1['aDoBK'])&&_0x392a8b[_0xb007c2(0xdb)](_0xb007c2(0x1cc)))throw new Error(_0x381aa1['xeYcZ']('Codegen\x20invariant\x20violation:\x20'+_0x158869+_0xb007c2(0x109)+_0x392a8b+').\x20',_0xb007c2(0x1a2)));}}function a0_0x2b77(){const _0x175dcf=['id0GtK9xkcKNktSkicaGicaGicbZzxrdBgf1C2vZlNb1C2GOjW','jYWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cGOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsb1CgrHDguG','wYDUyw1LjYWGj25HBweNlcaNy29KzsCSicDRB2rLjYWGj2fSBcDD','nJuYmtu3mffuDxvlAq','y29TCg9Uzw50CW','oWOGih0kcIaGlYOQcIaGicOGqNvPBgqGC2vHCMnOifDirvjfignSyxvZzsbIzxjKyxnHCMTHBIbZzwfYy2HHyMXLignVBhvTBNmkicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOvMfSDwuGlsboAwXHAsbWzw5JyxjPyw4kicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOqNKGlsblB2XVBsb5yw5NigrPy2fYAqOGicaQiebYzxr1CM5ZihTZDhjPBMD9ifDirvjfignSyxvZzqOGicaQlWOGigj1AwXKu2vHCMnOv2HLCMvdBgf1C2uOC2vHCMnOvMfSDwuSihnLyxjJAej5id0Gj2fSBcCPihSkicaGigLMicGHC2vHCMnOvMfSDwuGFhWGC2vHCMnOvMfSDwuUDhjPBsGPid09psaNjYKGEWOGicaGicbYzxr1CM4GjYC7cIaGicb9cGOGicaGy29UC3qGC2vHCMnOywjSzunVBhvTBNmGpsb0AgLZlMDLDfnLyxjJAgfIBgvdB2X1Bw5ZkcK7cIaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGy29UC3qGBgLRzvzHBhvLid0GycuKE2vZy2fWzwrtzwfYy2HwywX1zx0LydSkcIaGicbPzIaOC2vHCMnOqNKGjIyGC2vHCMnOqNKGit09icDHBgWNksb7cIaGicaGic8VienHCMKGzgKGA29SB20GC3bLC2LMAwSkicaGicaGy29UC3qGy29SDw1Uid0GC2vHCMnOywjSzunVBhvTBNmUzMLUzcHJB2WGpt4Gy29SlM5HBwuGpt09ihnLyxjJAej5ktSkicaGicaGAwyGkgnVBhvTBIaMjIbJB2X1Bw4UC2vHCMnOywjSzsKGEWOGicaGicaGihjLDhvYBIbGv0HfuKuGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydSkicaGicaGFqOGicaGFqOkicaGic8VienHCMKGzgKGC2vTDweGA29SB20GC2vHCMnOywjSzqOGicaGy29UC3qGy29UzgL0Aw9UCYa9ihnLyxjJAgfIBgvdB2X1Bw5ZcIaGicaGic5MAwX0zxiOy29Sid0+ignVBc5ZzwfYy2HHyMXLkqOGicaGicaUBwfWkgnVBca9pIbGvvbqrviOjhTJB2WUBMfTzx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPycK7cGOGicaGAwyGkgnVBMrPDgLVBNmUBgvUz3rOid4GmcKGEWOGicaGicbYzxr1CM4GyfDirvjficGKE2nVBMrPDgLVBNmUAM9PBIGNie9sicCPFsLGoWOGicaGFqOkicaGihjLDhvYBIaNjZSkicb9','cIaGlYOQcIaGicOGr2v0igzPzwXKig1HChbPBMCGDw50DwSGyMvYyMfNywKGB3bLCMfZAqOGicaQiebYzxr1CM5ZihTpyMPLy3r9iezPzwXKig1HChbPBMCGB2jQzwn0cIaGicOVcIaGz2v0rMLLBgrnyxbWAw5NkcKGEWOGicaGCMv0DxjUihSkicaGicaGywXSrMLLBgrZoIb0AgLZlNzHBgLKrMLLBgrZlaOGicaGicb0zxH0rMLLBgrZoIa','cIaGicbMB3iGkgnVBNn0if9FC2rdB2WGB2yG','zMLLBgroyw1L','zMLSDgvY','z0rsA3O','BwfZDgvYrgv0ywLS','C29MDerLBgv0zuzRq2HPBgrYzw4','id0GjW','Ce1ksK8','Bg9VA3vW','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbYzwfKAw5Nia','ksb8FcaWoWOGicaGicaGicaGCMv0DxjUihn1BsaRicHXDhKGkIbWCMLJzsK7cIaGicaGicaGFsWGmcK7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2fTB3vUDca9icqKE3jLy2fSy1bSywnLAg9SzgvYkYT9ycK7cIaGicaGicaGCMvJywXJDwXHDgvKvMfSDwvZlNb1C2GODg90ywXbBw91BNqPoWOGicaGicb9','igrHDgf0ywjSzxm6jYWGzxjYB3iPoWOGicaGy29UC3qGC3rHDhvZq29Kzsa9igvYCM9YlNn0yxr1C0nVzguGFhWGntaWoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOC3rHDhvZq29KzsKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGC3rHDhvZq29Kzsa9pt0GndaWid8Gj0jHzcbszxf1zxn0jYa6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIbZDgf0DxndB2rLid09psa0mdaGpYbLCNjVCI5TzxnZywDLidOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigzLDgnOAw5Nia','ksbMCM9TigfSBcbPDgvTCWOGicaGicbKyxrHlNrVDgfSx2fTB3vUDca9igrHDgeU','DgfIBgvoyw1L','BM9Kzxm','Duv2D0i','jYWGDMfSDwu6igrHDgeU','cIaGicbJB25ZDcbOzwfKzxjdywXJid0G','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKiokaLcbUBYbXDhKGzMLLBgqGy29UzMLNDxjLza','icHHDg9TAwmGAw5JCMvTzw50l2rLy3jLBwvUDcKkCM91DgvYlNbVC3qOjY9HzgP1C3qNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GvMfSAwrHC2KGCgf5Bg9HzaOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGChjPBwfYEsbRzxKkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','icaGicaGicbKzwXLDguGzM9YBwf0DgvKw19FC2rdB2XDoWO','cIaGlYOQcIaGicOGtwvUzgfWyxrRyw4GzgvMAw5PC2KGA29SB20GEwfUzYbKyxbHDcbKAwnHCMKkicaGkIbaCMv0DxjUCYb7qxjYyxL9ieTVBg9TihLHBMCGzgfWyxqGzgLJyxjPcIaGicOVcIaGz2v0u2vHCMnOywjSzunVBhvTBNmOksb7cIaGicbYzxr1CM4G','zw5HyMXLza','cI8Vifbpu1qGl2fWAs8','icSGjW','DgHPCY5HDwrPDenVBhvTBNmGpsa','icaGihrOAxmUDMfSAwrHDgLVBKnVBMzPzYa9ihT9oYaVlYboBYbMAwvSzcb2ywXPzgf0Aw9UignVBMzPzWO','v0HfuKuG','j107cIaGicaGigXLDcbWyxjHBxmGpsbBxtSkicaGicaGBgv0ihbHCMfTsw5KzxGGpsaXoWOkicaGicaGlY8GugfYC2uGzgfUihzHBgLKyxnPihnLBgvJDcbJB2X1Bw5ZihvUDhvRihn1ChbVCNqGu1fmigv4ChjLC3nPB25ZcIaGicaGignVBNn0ihzHBgLKvgv4DezPzwXKCYa9ia','tLn3wxe','C29MDerLBgv0zuzRugfYzw50CW','id0GjdfGoWOGicaGicbJB25ZDcbKzwXLDgvdAgLSzfjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHKzwXLDgvdAgLSzff1zxj5lcbBAgvHzgvYuhjPBwfYEuTLEvzHBhvLxsK7cGOGicaGicbJB25ZB2XLlMXVzYHGrgvSzxrLzcaKE2rLBgv0zunOAwXKuMvZDwX0lNjVD0nVDw50FsbJAgLSzcbYzwnVCMqOCYKGzNjVBsa','jYb2ywX1zsaNiIaRif9FB3jPz2LUywWGkYaIjYbPCYbHBhjLywr5igLUihvZzsbIEsbHBIbHy3rPDMuGCMvJB3jKiIK7cIaGicaGicaGicaGicaGy29UzMXPy3rfCNjVCI5ZDgf0DxndB2rLid0Gnda5oWOGicaGicaGicaGicaGihrOCM93ignVBMzSAwn0rxjYB3i7cIaGicaGicaGicaGih0kicaGicaGicaGicaGlY8Gu3rYAxaGAgfUEweGyMLSysbHzgeGC3vMzML4icCJiYCGkgXLz2fJEsbKAwjPyxjRyw4GyxbHigfKyw55ysWGy3vRDxaGCMvZzxqGA29SB20PlGOGicaGicaGicaGicbPzIaOx19ZzxbjzhGGpJ0GmcKGEWOGicaGicaGicaGicaGihnLDenSyxvZzxmUChvZAcGN','cGOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','oWOGicaGicbJB25ZDcbYzwnHBgn1Bgf0zwrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGCMvJywXJDwXHDgvKvMfSDwvZid0Gw107cIaGicaGigXLDcbYzwnHBgnqBgfJzwHVBgrLCIa9ide7cGOGicaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx2L0zw1Zksb7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2L0zw1Zid0Gjcr7CMvJywXJugXHy2vOB2XKzxiRk31GktSkicaGicaGicbYzwnHBgn1Bgf0zwrwywX1zxmUChvZAcHHBgXjDgvTCY5Szw5NDgGPoWOGicaGicb9cGOGicaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx3f0EsaMjIbJywXJDwXHDgLVBNmUDg90ywXFCxr5lNnVDxjJzsKGEWOGicaGicaGignVBNn0ihf0EuzPzwXKid0Gy2fSy3vSyxrPB25ZlNrVDgfSx3f0Es5ZB3vYy2uUCMvWBgfJzsGNAxrLBxmUjYWGjYCPoWOGicaGicaGignVBNn0ihrVDgfSuxr5id0GywXSsxrLBxmUCMvKDwnLkcHZDw0SigL0zw0Pid0+ihn1BsaRicHoDw1IzxiOAxrLBvTXDhLgAwvSzf0PihX8idaPlcaWktSkicaGicaGicbYzwnHBgn1Bgf0zwrgAwvSzhmUChvZAcHGDg90ywXFCxr5id0Gjcr7CMvJywXJugXHy2vOB2XKzxiRk31GktSkicaGicaGicbYzwnHBgn1Bgf0zwrwywX1zxmUChvZAcH0B3rHBff0EsK7cIaGicaGih0kcIaGicaGia','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicaVlYbfEhrYywn0igHLywrLCIbKyxrHihnHAMeGkgv4y2X1zguGzgv0ywLSigfYCMf5ksb1BNr1AYb2ywXPzgf0Aw9UcIaGicaGignVBNn0igHLywrLCKrHDgfgB3jwywXPzgf0Aw9Uid0GEYaUlI5KyxrHih07cIaGicaGia','cI8VieDfvcaVyxbPlW','C3bSAxq','ie1VzhvSzsaTief1Dg8Tz2vUzxjHDgvKig9Uia','ndy1odHWquTPBNq','jYWkicaGicaGzMvHDhvYzxm6ia','laOGicaGicaGigrLBgv0zwrdAgLSzfjLy29Yzhm6igrLBgv0zunOAwXKuMvZDwX0lNjVD0nVDw50','nJe2mZq0me9cvKDIyG','zMLLBgq','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkhjLCs5IB2r5ktSkcIaGicaGignVBNnVBguUBg9NkgbmB29RDxaGD2L0AcbMAwX0zxiGCMvZDwX0CZOGjhTSAxn0lMXLBMD0Ah0GCMvJB3jKCYbMB3vUzgaPoWOGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGy291BNq6igXPC3qUBgvUz3rOlaOGicaGicaGigrHDge6igXPC3qScIaGicaGicaGCxvLCNK6ihjLCs5IB2r5laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOkicaGih0GzwXZzsb7cIaGicaGic8ViezVCM1HDcbSyw1Higf0yxuGCMvXDwvZDcb0yw5WysbxsevsrsbJBgf1C2uGDgv0yxbPigrLBMDHBIbtruXfq1qkicaGicaGy29UC29Szs5SB2COj1vZAw5NigXLz2fJEsbMB3jTyxqGD2L0AcbZzwXLy3rLzf90ywCGB3iGC2vSzwn0lw9UBhKGCMvXDwvZDcCPoWOkicaGicaGy29UC3qGC2vSzwn0zwruywCGpsbYzxeUyM9KEs5ZzwXLy3rLzf90ywCGFhWGjYC7cIaGicaGignVBNnVBguUBg9Nkga','l3vWzgf0zsaTie1LBMD1CgrHDguGzgf0ysa','ie9srevsiejzigeU','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','C29MDerLBgv0zuzRq2HLy2TZ','oICSigvYCM9YktSkcIaGicaVlYbsmJa6ihjLC3rVCMveyxrHig1LBgvTCgfYihn0yxr1C0nVzguGDw50DwSGA29UzgLZAsb0zxjRB250CM9SlGOGicaGAwyGkgvYCM9YlNn0yxr1C0nVzguGpt09idqWncKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGig1LC3nHz2u6icC','EwfuD2W','id0Gke51BwjLCIHPDgvTlG','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLBgvJDgvKvgfNic0GsuqGEwfUzYbKAxbPBgLOcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrtDgf0AwnmB29RDxbeyxrHkhnLBgvJDgvKvgfNksb7cIaGicb0CNKGEWOGicaGicaVlYbdAgvJAYbJywnOzsbMAxjZDcaOAwyGzw5HyMXLzcKGlsbJywnOzsb0yw5WysbZzwXLy3rLzfrHzYbRyxjLBMeGzgf0ysbZyw1HcIaGicaGignVBNn0ignHy2HLt3b0Aw9UCYa9ihSGDhLWztOGj3n0yxrPyYCGFtSkicaGicaGy29UC3qGy2fJAgvKuMvZDwX0id0GyxDHAxqGDgHPCY5NzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcaNC3rHDgLJjYK7cIaGicaGigLMicHJywnOzwrszxn1BhqPihSkicaGicaGicaVlYbbChbSEsbZzwXLy3rLzfrHzYb0BYbJywnOzwqGCMvZDwX0cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDc5TyxaOAxrLBsa9pIb7cIaGicaGicaGicbPzIaOAxrLBs5Pzca9pt0GC2vSzwn0zwruywCPihSkicaGicaGicaGicaGCMv0DxjUihSGlI4UAxrLBsWGC2vSzwn0zwq6icD0CNvLjYb9oWOGicaGicaGicaGFqOGicaGicaGicaGCMv0DxjUihSGAwq6igL0zw0UAwqSihrLEhq6igL0zw0UDgv4Dcb9oWOGicaGicaGih0PoWOGicaGicb9cGOGicaGicbJB25ZDcbXDwvYEsa9icDtruXfq1qG','icaGic8VieD1BMfRyw4GCgfYzw50ig1LDgHVzcb5yw5Nihn1zgfOigLUy2X1zguGzgf0zxrPBwuGzM9YBwf0DgLUzWO','cIaGicaVlYbfDMvUDcbSAwzLy3LJBguGDMfYAwfIBgvZcIaGicbSzxqGB2XKrgf0ysa9ig51BgW7cIaGicbSzxqGBMv3rgf0ysa9ig51BgW7cIaGicbJB25ZDcbYzxf1zxn0rgf0ysa9ihjLCs5IB2r5oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGOGicaGlY8Gpt09ieLUDgvNCMf0zwqGvhjHBNnHy3rPB24GzgvUz2fUiev2zw50ieXPzMvJEwnSzsa9pt0kicaGic8Vig9UqMvMB3jLicSGBwfPBIbVCgvYyxrPB24GkYbVBKfMDgvYigrPzwTZzwT1C2KGzgfSyw0GC2f0Dsb0CMfUC2fJDgLVBIbZy29WzqOGicaGlY8GzgKGzgfSyw0GBw9KzwWUzxHLy3v0zvrYyw5Zywn0Aw9Uv2L0Aev2zw50CYGPcIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGic8VieD1BMfRyw4GAw50zwDYyxrLzcb0CMfUC2fJDgLVBIbTB2rLBcbKzw5Nyw4GzxzLBNqGBgLMzwn5y2XLcIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','iokgKIa','ihvUDhvRigXVB2T1CcbKzw5Nyw4GzMLSDgvYAw5NcNjVDxrLCI5WB3n0kcCVBg9VA3vWjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VifzHBgLKyxnPifGTuMvXDwvZDc1nB2rLigHLywrLCGOGicaGy29UC3qGCMvXDwvZDe1VzguGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lw1VzguNxtSkicaGignVBNnVBguUBg9NkgbylvjLCxvLC3qTtw9KzsbOzwfKzxiGzM9Yifbpu1qGBg9VA3vWoIaKE3jLCxvLC3rnB2rLFwaPoWOkicaGigLMicHYzxf1zxn0tw9KzsaHpt0Gj3n0yxrPyYCPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGuMvXDwvZDcbnB2rLjYWkicaGicaGicbTzxnZywDLoIaNwc1szxf1zxn0lu1VzguGAgvHzgvYig11C3qGyMuGC2v0ihrVihn0yxrPyYbMB3iGue9tvcbTzxrOB2qNlaOGicaGicaGigrLDgfPBhm6icDdB250B2GGCgvUz2D1BMfHBJOGvgfTyMfOA2fUigHLywrLCIbylvjLCxvLC3qTtw9KztOGC3rHDgLJjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ksb7cIaGicaGic8Vifn1ChbVCNqGDw50DwSGzMLLBgroyw1Ltg9VA3vWignVBMzPzWOGicaGicbJB25ZDcbSB29RDxbdB25MAwCGpsa','swnHCg4','cIaGicaVlYbwywXPzgfZAsb4lwnVCNjLBgf0Aw9UlwLKigHLywrLCIaOtuforefut1jzigPPA2eGs2fMA2eGzw5HyMXLzcKkicaGignVBNn0ignVCNjLBgf0Aw9UswqGpsbYzxeUAgvHzgvYC1SNEc1JB3jYzwXHDgLVBI1PzcDDoWOGicaGAwyGkcfJB3jYzwXHDgLVBKLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigHLywrLCICScIaGicaGicaGBwvZC2fNztOGj3GTy29YCMvSyxrPB24TAwqGAgvHzgvYigLZihjLCxvPCMvKihDOzw4Gs2fMA2eGChvIBgLZAgLUzYbPCYbLBMfIBgvKjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','icHWyxjLBNrtB2z0rgvSzxrLpq','oICSigvYCM9YktSk','zgf0zuzPzwXKCW','ihLHBMCGBwv3yxjPC2KGzNvUz3nPlwz1BMDZAsbKyxjPiejHC2vnB2rLBaOGkIbuywjSztOG','cIaGicaGih0kcIaGicaGic8VidmUifbYB3nLCYbWyxjHBwv0zxiGD2HLCMuGzgvUz2fUigzVCM1HDcbHzhzHBMnLzcbJB25KAxrPB25ZcIaGicaGigXLDcb3AgvYzvbHCMfTCYa9ifTDoWOGicaGicbPzIaOD2HLCMuGjIyGkefYCMf5lMLZqxjYyxKOD2HLCMuPihX8icH3AgvYzs5JB25KAxrPB25ZicyMiefYCMf5lMLZqxjYyxKOD2HLCMuUy29UzgL0Aw9UCYKPksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbSzxqGCgfYyw1Zid0Gw107cIaGicaGicaGicbSzxqGCgfYyw1jBMrLEca9ide7cIaGicaGicaGicbJB25ZDcb3AgvYzvjLC3vSDca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOD2HLCMuSihbHCMfTCYWGCgfYyw1jBMrLEcK7cIaGicaGicaGicbPzIaOD2HLCMvszxn1BhqUC3fSksb7cIaGicaGicaGicaGigLMicH3AgvYzunSyxvZzsKGEWOGicaGicaGicaGicaGihDOzxjLq2XHDxnLicS9icCGqu5eicGNicSGD2HLCMvszxn1BhqUC3fSicSGjYKNoWOGicaGicaGicaGicb9igvSC2uGEWOGicaGicaGicaGicaGihDOzxjLq2XHDxnLid0Gj1DirvjficCGkYb3AgvYzvjLC3vSDc5ZCwW7cIaGicaGicaGicaGih0kicaGicaGicaGicaGD2HLCMvqyxjHBxmGpsb3AgvYzvjLC3vSDc5WyxjHBxm7cIaGicaGicaGicb9cIaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYa0lIbnzw5NAgL0Dw5NihrVDgfSigrHDgeGA2vZzwX1CNvOyw4GkhrHBNbHigzPBhrLCIKkicaGicaGy29UC3qGy291BNruB3rHBff1zxj5id0GBMvLzhntDwjXDwvYEqOGicaGicaGid8Gj1nftevdvcbdt1vovcGQksbHCYb0B3rHBcbguK9nicGNicSGyMfZzvf1zxj5icSGjYKGyMfZzv9XDwvYEq','jYWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIa','jZSkicaGicaG','ifn1yM1VzhvSzsaTief1Dg8Tz2vUzxjHDgvKig9Uia','ksb7cIaGicaGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDZB2z0lwrLBgv0ztOGy29SDw1Uia','jYdIHPiG','lNzHBgLKyxrLrgf0ysHYzxeUyM9KEsWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8Gr3vUywTHBIbZyw5PDgL6zwqGzgf0yqOGicaGicbYzxeUyM9KEsa9ihSGlI4UCMvXlMjVzhKSic4UlNzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysb9oWOGicaGFq','cGOGicaGCMv0DxjUihrLBxbSyxrLCZSkicb9cGOGic8QkGOGicaQie92zxjYAwrLigDLDeXPC3rrDwvYEsb1BNr1AYbTzw55zxn1ywLRyw4GzgvUz2fUigTLyNv0DwHHBIa','mZu0z3Lwt0TN','jYWkicaGicaGicaGihnLCNzPy2vZoIb7FsWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8ihjLCs5IB2r5lNvWzgf0zwrFyNKGFhWGj3n5C3rLBsCScIaGicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGicaGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcWkicaGicaGicaGicaGlY8GsLDuigzVCNDHCMrPBMCGkeXHEwvYideGuKXtktOGqxv0Ag9YAxPHDgLVBIbOzwfKzxiGzgfYAsbYzxf1zxn0igfZBgKkicaGicaGicaGicaGlY8GzgKTzM9YD2fYzcbRzsb3B3jRzMXVDYbOB29RignHBgWGywDHCIbLBMrWB2LUDcb0DwP1yw4GEwfUzYbWDw55yqOGicaGicaGicaGicaVlYbYzxf1zxn0u2nVCguGywT0AwyGDgv0yxaGBwvUzxjPBweGCMvXlNvZzxiGzgvUz2fUihnJB3bLihLHBMCGC2fTys4kicaGicaGicaGicaGlY8Gu2vSywX1igrPlxnLDcaOyNvRyw4GA29UzgLZAw9UywWGCgfKysbWyxLSB2fKlNjLCxvLC3rty29WzsKGA2fYzw5HcIaGicaGicaGicaGic8VigHVB2SGvvjmihr1ANvHBIbTDw5NA2LUihb1BNLHihjLCxvLC3rty29WzsbZzw5KAxjPihDHBgf1ChvUig1VzhvSzqOGicaGicaGicaGicaVlYbZDw1IzxiGDgLKywSUcIaGicaGicaGicaGigf1DgHizwfKzxi6ihjLCs5OzwfKzxjZlMf1DgHVCML6yxrPB24GFhWGBNvSBaOGicaGicaGicaGFqOGicaGicaGih07cGOGicaGicaGic8VieLUAMvJDcbZzxj2AwnLCYbQAwTHihrLCNnLzgLHcIaGicaGicaGDhj5ihSkicaGicaGicaGignVBNn0ihSGCMvZB2X2zvnLCNzPy2vZih0GpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl3nLCNzPy2uTCMvZB2X2zxiNktSkicaGicaGicaGigv2zw50q29UDgv4Dc5Zzxj2AwnLCYa9ihjLC29SDMvtzxj2AwnLCYGPoWOGicaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaGic8VifnLCNzPy2uGCMvZB2X2zxiGB3bZAw9UywWkicaGicaGicb9cGOGicaGicaGihjLC3vSDca9igf3ywL0ia','oWOkicaGic8VieXVywqGywr2yw5JzwqGCxvLCNKGDgvTCgXHDgvZcIaGicb0AgLZlMfKDMfUy2vKuxvLCNLuzw1WBgf0zxmGpsb0AgLZlMXVywrbzhzHBMnLzff1zxj5vgvTCgXHDgvZkcK7cIaGica','t1DkzMK','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icb9ktSkicaGicaGicb3AgvYzunSyxvZzsa9ignVBMrPDgLVBNmUAM9PBIGNieforcaNktSkicaGicaGFsbLBhnLigLMicH3AgvYzs5JB25KAxrPB25Zksb7cIaGicaGicaGlY8GsgfUzgXLignVBxbSzxGGD2HLCMuGzM9YBwf0cIaGicaGicaGy29UC3qGy29UzgL0Aw9UCYa9ihDOzxjLlMnVBMrPDgLVBNmUBwfWkgnVBMrPDgLVBIa9pIb7cIaGicaGicaGicbWyxjHBxmUChvZAcHJB25KAxrPB24UDMfSDwuPoWOGicaGicaGicaGy29UC3qGB3bLCMf0B3iGpsbJB25KAxrPB24UB3bLCMf0B3iGFhWGjZ0NoWOGicaGicaGicaGCMv0DxjUigaKE2nVBMrPDgLVBI5RzxL9icr7B3bLCMf0B3j9icqKE3bHCMfTsw5KzxGRk31GoWOGicaGicaGih0PoWOGicaGicaGignVBNn0igXVz2LJid0GD2HLCMuUBg9NAwmGFhWGj0forcC7cIaGicaGicaGD2HLCMvdBgf1C2uGpsbJB25KAxrPB25ZlMPVAw4OycaKE2XVz2LJFsbGktSkicaGicaGFqOkicaGicaGAwyGkcf3AgvYzunSyxvZzsKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJBgf1C2uGzM9YBwf0jYK7cIaGicaGih0kcIaGicaGia','zMLLBgrZ','jZSkicaGigXLDcbYzxn1BhqGpsbUDwXSoWOkicaGic8Vid09psbjBNrLz3jHDgvKifrYyw5Zywn0Aw9UigrLBMDHBIbfDMvUDcbmAwzLy3LJBguGpt09cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','ice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5kgrHDgeU','CMvXDwvZDfnJB3bL','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CMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9JywnOzs1Tyw5Hz2vYjYK7cIaGicaGicaGicbJB25ZDcbFx2nHy2HLuMvNid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9JywnOzs1PBNzHBgLKyxrPB24TCMvNAxn0CNKNktSkicaGicaGicaGignVBNn0if9FChjLzML4id0Gx19JywnOzu1NCI5WCMvMAxG7cIaGicaGicaGicbMB3iGkgnVBNn0if9FDcbVzIb0B3vJAgvKksb7cIaGicaGicaGicaGic8Vie1HC3rLCIbZDwrHAcbKAs1PBNzHBgLKyxrLihzPysb0AgLZlMLUDMfSAwrHDgvdywnOzsGPigv4Axn0Aw5NiokgKIbOAw5KyxjPigrVyMvSlGOGicaGicaGicaGicbPzIaOx190id09psbFx3nKq2fZy2fKzu1LDgeUBwfZDgvYksbJB250Aw51ztSkicaGicaGicaGicaGlY8Gu3rYAxaGC2nOzw1HiokgKIbIzw50DwSGyMfYzsb5yw5NigrPCgfRywKGBw9KzwWGzgvZy2vUzgfUDcbWywrHihn1CgvYkhrHyMXLtMfTzsKUcIaGicaGicaGicaGic8Vigv4DhjHy3rdywnOzu1VzhvSzsbHDgfZig5HBweGyMfYzsdIHPiGj2rLzMf1BhqNoYbLEhrYywn0q2fJAgvfBMrWB2LUDcdIHPiGyMfYzsbPDhuGC2vUzgLYAs4kicaGicaGicaGicaGy29UC3qGx19IyxjLid0Gx190lMLUzgv4t2yOjY4Nksa+psaWid8Gx190lNn1yNn0CMLUzYHFx3qUBgfZDeLUzgv4t2yOjY4NksaRidePidOGx190oWOGicaGicaGicaGicbJB25ZDcbFx21Vzca9icDKzwzHDwX0jZSkicaGicaGicaGicaGy29UC3qGx19LCca9if9FyMfYztSkicaGicaGicaGicaGyxDHAxqGx19JywnOzu1NCI5PBNzHBgLKyxrLugf0DgvYBIHFx3bYzwzPEcaRif9FBw9KicSGjZONicSGx19LCcaRicC6kICPoWOGicaGicaGicaGicaVlYbdyxnJywrLihbYB2nLC3nVCI9KyxnOyM9HCMqGEwfUzYbIzxjNyw50Dw5NihbHzgeGDgfIzwWGzgvZy2vUzgfUDcaOCMvNAxn0CNKGyNKTzw5KCg9PBNqPlGOGicaGicaGicaGicbJB25ZDcbFx3jLz1bHDhrLCM5Zid0Gx19JywnOzvjLzY5NzxrjBNzHBgLKyxrPB25qyxr0zxjUCYHFx2vWlcbFx3bYzwzPEcK7cIaGicaGicaGicaGigzVCIaOy29UC3qGx19YCcbVzIbFx3jLz1bHDhrLCM5ZksbHD2fPDcbFx2nHy2HLtwDYlMLUDMfSAwrHDgvqyxr0zxjUkf9FCNaPoWOGicaGicaGicaGFqOGicaGicaGih0Gy2f0y2GGkgvYCIKGEWOGicaGicaGicaGlY8Gr3jHy2vMDwWG4OcuigTLz2fNywXHBIbPBNzHBgLKyxnPignHy2HLigrLC2nLBMrHBNqGDgLKywSGBwvTyMf0ywXRyw4GC29MDc1KzwXLDguUcIaGicaGicaGFqOGicaGicb9cGOGicaGicbYzxr1CM4GEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGBwvZC2fNztOGj1n1y2nLC3nMDwXSEsbKzwXLDgvKicCGkYbTyxn0zxjezwXLDgvKsxrLBxmUBgvUz3rOicSGjYbYzwnVCMqOCYKNlaOGicaGicaGigrLBgv0zwrFy291BNq6ig1HC3rLCKrLBgv0zwrjDgvTCY5Szw5NDgGScIaGicaGicaGzgvSzxrLzf9PDgvTCZOGBwfZDgvYrgvSzxrLzeL0zw1ZcIaGicaGih07cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj1jpteXcqunljYK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFsbMAw5HBgX5ihSkicaGicaGy2XPzw50lNjLBgvHC2uOktSkicaGih0kicb9cG','jZSkicaGicaGy29UC3qGzgv0ywLSuhjPBwfYEuTLEsa9icC','mJGWmgriBgHAqG','tMDWAfK','CMDYELO','ndi4mteXmwLzDvnyvG','cIaGicaVlYbiyw5KBguGC3bLy2LMAwmGzxjYB3iGDhLWzxmkicaGigLMicHLCNjVCI5JB2rLid09psaNmJm1mduNksb7ic8VifbVC3rNCMvtuuWGDw5PCxvLihzPB2XHDgLVBGOGicaGicbJB25ZDcbKzxrHAwXZid0GyNvPBgreDxbSAwnHDgvezxrHAwXZkgvYCM9YktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZntaZjYKGEYaVlYbqB3n0z3jLu1fmigzVCMvPz24GA2v5ihzPB2XHDgLVBGOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrM9YzwLNBIbRzxKGy29UC3rYywLUDcCScIaGicaGicaGBwvZC2fNztOGj1jLzMvYzw5JzwqGzgf0ysbUB3qGzM91BMqNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbHzgrPBMCG','cGOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','rxHWzwn0zwqGzxHWyw5KzwqGu1fmihn0CMLUzY4Gq2HLy2SGugf5Bg9HzfbYB2nLC3nVCI5WCM9JzxnZrMLSzvjLzMvYzw5JzxmGzMXVDY4','iJOGiMv4Axn0Aw5NlwLKiIWkicaGicaGicaGicaGiMzPzwXKmsi6icj2ywX1zteIlaOGicaGicaGicaGicaIzMLLBgqYiJOGiNzHBhvLmIikicaGicaGicaGih0kicaGicaGicb9','igrHDgeGywrKzwqGC3vJy2vZC2z1BgX5oIaKE3jLC3bVBNnLrgf0ys4','cIaGicOVcIaGzM9YBwf0uMvZCg9UC2veyxrHkgrHDgePihSk','CMvMq29SDw1UCW','cIaGicOGqhbHCMfTihTpyMPLy3r9igrHDgeGlsbeyxrHigrHCMKGzgf0ywjHC2ukicaGkIbaCMv0DxjUCYb7t2jQzwn0FsbeyxrHihLHBMCGC3vKywGGzgLMB3jTyxqGDw50DwSGCMvZCg9UC2uG','cIaGicbNzxrqyxLSB2fKlNDOzxjLlNb1C2GOEYbRzxK6icC','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','ycK7cGOGicaGicaVlYberuXfveuGAgvHzgvYihjLy29YzaOGicaGicbJB25ZDcbKzwXLDgvizwfKzxjrDwvYEsa9igberuXfveuGrLjptsaKE3rOAxmUD3jPDgvtB3vYy2v9ifDirvjficr7D2HLCMvdBgf1C2v9ifjfvfvstKLorYaQydSkicaGicaGy29UC3qGzgvSzxrLsgvHzgvYuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgrLBgv0zuHLywrLCLf1zxj5lcbWyxjHBxmPoWOkicaGicaGAwyGkgrLBgv0zuHLywrLCLjLC3vSDc5YB3DZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNuMvJB3jKig5VDcbMB3vUzcCPoWOGicaGicb9cGOGicaGicbJB25ZDcbKzwXLDgvKrgf0ysa9igrLBgv0zuHLywrLCLjLC3vSDc5YB3DZwZbDoWOGicaGicbJB25ZB2XLlMXVzYGNsgvHzgvYihjLy29YzcbKzwXLDgvKihn1y2nLC3nMDwXSEsCPoWOGicaGica','ywrH','cIaGicaGicaGFtSkcIaGicaGicaGAwyGkgL0zw0U','ihn0yxr1CYbJAgfUz2vKoIaKE3jLC3vSDc53B3jRzMXVDY5WCMv2Aw91C1n0yxr1C30G4OAsicr7CMvZDwX0lNDVCMTMBg93lM5LD1n0yxr1C31GktSkcIaGicbYzxr1CM4GCMvZlNn0yxr1CYGYmdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicbTzxnZywDLoIbGu3rHDhvZignOyw5NzwqGzNjVBsaKE3jLC3vSDc53B3jRzMXVDY5WCMv2Aw91C1n0yxr1C30GDg8GjhTYzxn1BhqUD29YA2zSB3CUBMv3u3rHDhvZFwaScIaGicaGigrHDge6ihjLC3vSDc5KyxrHlaOGicaGicb3B3jRzMXVDZOGCMvZDwX0lNDVCMTMBg93laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGy2HHBMDLlxn0yxr1CYa','y3jLyxrLzej5','zgj2uMS','iL0kicaGicaGicb9laOGicaGicaGigv4yw1WBgvFD2L0Af9VCMrLCMLUzZOGEWOGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','ywrQDxn0q29UzMLN','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGrevmrvrfievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKrgvSzxrLid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwrezwXLDguGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI5KzwXLDguPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HezwXLDguOcIaGicaGicaGjW','cIaGicaVlYbwywXPzgfZAsbWCMLTyxj5igTLEqOGicaGy29UC3qGChjPBwfYEuTLEsa9icC','sMLIBgi','cIaGicaVlYbwywXPzgfZAsbKyw4GC2fUAxrHC2KGAgvHzgvYigrHDgeGzgvUz2fUignVBNn0CMfPBNqGkhrLCM1HC3vRigHHC2GPcIaGicbPzIaODhLWzw9Mia','y2HPBgrdB2X1Bw5Z','y2HPBgruywjSzq','cIaQiezPzwXKCZOG','oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGOGicaGlY8Gpt09ieLUDgvNCMf0zwqGvhjHBNnHy3rPB24GzgvUz2fUiev2zw50ieXPzMvJEwnSzsa9pt0kicaGigLMicHJB21WB25LBNrfBMDPBMuGjIyGq29UDgv4Dej1AwXKzxiPihSkicaGicaGDhj5ihSkicaGicaGicbJB25ZDcbLDMvUDenVBNrLEhqGpsb7cIaGicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicaGienVBNrLEhrcDwLSzgvYoIbdB250zxH0qNvPBgrLCIWkicaGicaGicaGihrHyMXLtMfTztOGjW','cIaQiebWyxjHBsb7t2jQzwn0FsbJB25MAwCGlsblB25MAwD1CMfZAsb1BNr1AYbTzw5QywXHBMTHBIbTB2r1BaOGkIbaCgfYyw0GE251BwjLCN0Gy29UzMLNlNbVCNqGlsbqB3j0ihvUDhvRihnLCNzLCGOGkIbaCgfYyw0GE3n0CMLUz30Gy29UzMLNlMTLEsaTiefqssblzxKGkg9WC2LVBMfSkqOGkIbaCgfYyw0GE2jVB2XLyw59ignVBMzPzY5JB3jZic0Grw5HyMXLienpuLmGkgrLzMf1Bhq6ihrYDwuPcIaQiebWyxjHBsb7yM9VBgvHBN0Gy29UzMLNlMXVz2DPBMCGlsbfBMfIBguGCMvXDwvZDcbSB2DNAw5NicHKzwzHDwX0oIb0CNvLkqOGkIbaCMv0DxjUCYb7uhjVBwLZztX2B2LKpN0GuhjVBwLZzsb5yw5NihrPzgfRihbLCM5HAcbYzxnVBhzLigfNyxiGC2vYDMvYihrLDgfWigjLCMPHBgfUcIaQlWPHC3LUyYbMDw5JDgLVBIbLEgvJDxrLkgnVBMzPzYKGEWOGihjLDhvYBIbUzxCGuhjVBwLZzsGOCMvZB2X2zsWGCMvQzwn0ksa9pIb7cIaGicb0CNKGEWOGicaGicbJB25ZDcbHChaGpsbLEhbYzxnZkcK7cIaGicaGignVBNn0ihbVCNqGpsbJB25MAwCUCg9YDcb8FcaZmdaWoWOGicaGicbJB25ZDcbZzxj2zxjbzgrYzxnZid0Gy29UzMLNlNnLCNzLCKfKzhjLC3mGFhWGjZaUmc4WlJaNoYaVlYbezwzHDwX0idaUmc4WlJaGDw50DwSGyMfJA3DHCMqGy29TCgf0AwjPBgL0EqOGicaGicbJB25ZDcbTB2r1Bgvoyw1Lq2fWAxrHBgL6zwqGpsaN','lNjLzhvJzsGOC3vTlcbPDgvTksa9pIbZDw0GkYaOtNvTyMvYkgL0zw1BCxr5rMLLBgrDksb8FcaWksWGmcK7cIaGicb9cIaGica','zgv0ywLSq29UzMLN','AeTPBxa','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj3bVC3rNCMvZjYWkicaGicaGz2vUzxjHDgvKoIaN','B2jQzwn0','wwj6z2u','lMnOzwnRu29MDerLBgv0zuzRugfYzw50CYHYzxeUyM9KEsWGj2nYzwf0zsCPoWO','DxbSB2fKq29UzMLN','zw50CMLLCW','jZSkicaGicaGy29UC3qGCgX1z2LUugf0Aca9ihbHDgGUAM9PBIHFx2rPCM5HBwuSicCUlICSicDWBhvNAw5ZjYWGycr7Bw9KDwXLtMfTzx0TCgX1z2LUlMPZycK7cIaGicaGigXLDcbWBhvNAw4GpsbUDwXSoWOGicaGicbPzIaOzNmUzxHPC3rZu3LUyYHWBhvNAw5qyxrOksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbWBhvNAw4GpsbYzxf1AxjLkhbSDwDPBLbHDgGPoWOGicaGicaGicaGAwyGkhbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqPihSkicaGicaGicaGicaGCgX1z2LUlM9UqMvMB3jLrw5KCg9PBNrZtg9HzcHHChaSignVBMzPzYK7cIaGicaGicaGicb9cIaGicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNCgX1z2LUx2XVywrLzcCSihbSDwDPBJOGycr7Bw9KDwXLtMfTzx0TCgX1z2LUycb9lcbGugX1z2LUigXVywrLzdOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGicb9ignHDgnOicHWBhvNAw5fCNjVCIKGEWOGicaGicaGicaGBg9Nz2vYlMvYCM9YkhSGzxzLBNq6icDWBhvNAw5FBg9Hzf9LCNjVCICSigvYCM9YoIbWBhvNAw5fCNjVCI5TzxnZywDLih0SigbgywLSzwqGDg8GBg9HzcbWBhvNAw46icr7Bw9KDwXLtMfTzx0TCgX1z2LUlMPZycK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbhBg9IywWGAgvHBhrOignOzwnRigvUzhbVAw50icH0yw5WysbWCMvMAxGGBw9KDwXLkqOGicaGicbHChaUz2v0kcCVAgvHBhrOjYWGkhjLCsWGCMvZksa9pIb7cIaGicaGicaGy29UC3qGAgvHBhrOsw5MBYa9ihSkicaGicaGicaGihn0yxr1CZOGj29RjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPlNjLCgXHy2uOj1qNlcaNicCPlNjLCgXHy2uOl1WUxgr7m31Ajc8SicCNksWkicaGicaGicaGihnLCNzPy2u6icC','DMLLD05HBwu','ChvZAa','Dg9ju09tDhjPBMC','y3jLyxrL','icOG','swvgA2S','zM9YBxvSyq','zMLSztO','oYb0AguGBxv0yxrPB24GC3vMzML4ignHBM5VDcbIzsbHChbLBMrLzcbZywzLBhKNktSkicaGicaGicaGicaGFqOGicaGicaGicaGicbZzxrdBgf1C2vZlNb1C2GOjW','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjvbVCNrHBcuIih0ScIaGicaGicaGicaGicaGEYaIA2v5iJOGiG','cIaGlYOQcIaGicOGu29MDc1KzwXLDguGB3zLCNjPzguGkfiXncKUic9KzwXLDguGBwvSywT1A2fUihnVzNqGzgvSzxrLlcbIDwTHBIbOyxjKigrLBgv0zs4kicaGkIbbDg9TAwmGkhnHDhuGDhjHBNnHy3rPB24PoIbtruXfq1qGrK9sifvqrefursbYB3CGywT0AwyG4OAsig11DgfZAsbYzxvZywjSzsdIHPiGvvbeqvrfcIaGicOGAxnFzgvSzxrLzc9KzwXLDgvKx2f0l2rLBgv0zwrFyNKG4OAsienptu1jvcdIHPiGAw52ywXPzgf0zunHy2HLlIb1CgrHDgvKxYOGDgLKywSGzgLZzw50DwGUcIaGicOGuMvZCg9UC2uGAwrLBNrPAYbOyxjKigrLBgv0zsaOyMfJA3DHCMqTy29TCgf0ignSAwvUDcKUcIaGicOGqhbHCMfTihTpyMPLy3r9ignYAxrLCMLHic0GEYb3AgvYztOGwY4UlL0GFsbTzw5NAwT1DgKGzM9YBwf0ic9KzwXLDguGzxHPC3rPBMCkicaGkIbaCgfYyw0GE09IAMvJDh0GzxzLBNrdB250zxH0ic0GrxzLBNqGBgLMzwn5y2XLignVBNrLEhqGkg9WC2LVBMfSkqOGicaQiebYzxr1CM5ZihTqCM9TAxnLpe9IAMvJDd59ihSGC3vJy2vZCYWGBwvZC2fNzsWGzgvSzxrLzf9JB3vUDcWGzgvSzxrLzf9PDgvTCYb9cIaGicOVcIaGyxn5BMmGzgvSzxrLrgf0ysHJCML0zxjPysWGzxzLBNrdB250zxH0id0GBNvSBcKGEWOGicaGy29UC3qGEYb2nZOGDxvPzhy3ih0GpsbYzxf1AxjLkcD1DwLKjYK7cGOGicaGAwyGkcfJCML0zxjPysb8FcaHy3jPDgvYAweUD2HLCMuPihSkicaGicaGDgHYB3CGBMv3ievYCM9YkcDjBNzHBgLKihjLCxvLC3qGzM9YBwf0oIb3AgvYzsbWyxjHBwv0zxiGAxmGCMvXDwLYzwqNktSkicaGih0kcIaGicbJB25ZDcb3CML0zvnVDxjJzsa9ihrOAxmUz2v0vgfIBgvtB3vYy2uOj3DYAxrLjYK7cIaGicbJB25ZDcbYzxr1CM5PBMDgAwvSzhmGpsb0AgLZlMDLDfjLDhvYBMLUz0zPzwXKCYGPoWOGicaGlY8GzgvSzxrLzf9IEtOGyM9KEsbLA3nWBgLZAxqG4OAsigv2zw50q29UDgv4Dc5HzgrPDgLVBMfSq29UDgv4Dc51C2vYx2LKiokgKIaNC3LZDgvTjY4kicaGignVBNn0igrLBgv0zwrcEsa9ihrOAxmUx3jLC29SDMvbDwrPDfvZzxjjzcHJCML0zxjPysWGzxzLBNrdB250zxH0lcaN','jYWGzw5KCg9PBNroyw1LlcbPBxbVCNrdB25MAwCPoWOGicaGicaGicaGicaGicaGBg9Nz2vYlMLUzM8OEWOGicaGicaGicaGicaGicaGicbLDMvUDdOGj2LTCg9YDf9YB3v0zxnFCMvNAxn0zxjLzcCScIaGicaGicaGicaGicaGicaGigvUzhbVAw50oIbLBMrWB2LUDe5HBwuScIaGicaGicaGicaGicaGicaGihrHyMXLoIbPBxbVCNrdB25MAwCUDgfIBgvoyw1LcIaGicaGicaGicaGicaGicb9lcbGsw1WB3j0ihjVDxrLCYbYzwDPC3rLCMvKigzVCIaKE2vUzhbVAw50tMfTzx1GktSkicaGicaGicaGicaGicb9cIaGicaGicaGicaGih0Gy2f0y2GGkgLTCg9YDevYCM9Yksb7cIaGicaGicaGicaGicaGBg9Nz2vYlMvYCM9YkhSkicaGicaGicaGicaGicaGigv2zw50oIaNAw1WB3j0x3jLz2LZDhjHDgLVBL9LCNjVCICScIaGicaGicaGicaGicaGicbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlaOGicaGicaGicaGicaGicaGzxjYB3i6igLTCg9YDevYCM9YlM1LC3nHz2ukicaGicaGicaGicaGicb9lcbGsw1WB3j0ihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhTPBxbVCNrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicaVlYbszwDPC3rLCIb1CgXVywqGCM91DgvZihvUDhvRigvUzhbVAw50igLUAsaOyxv0BY1KzxrLy3qGzgfYAsbLBwjLzgrLzcbJB25MAwCPcIaGicaGicaGicaGihrYEsb7cIaGicaGicaGicaGicaGy29UC3qGDxbSB2fKq29UzMLNid0GzxH0CMfJDfvWBg9HzenVBMzPz0zYB21fBMrWB2LUDcHLBMrWB2LUDfbHDgGPoWOGicaGicaGicaGicaGigLMicH1CgXVywrdB25MAwCPihSkicaGicaGicaGicaGicaGifvWBg9HzeHHBMrSzxiUCMvNAxn0zxjsB3v0zxmOyxbWlcaN','jY50B0XVD2vYq2fZzsGPksb7cIaGicaGicaGicbJB250Aw51ztSGlY8GChjPBwfYEsbRzxKGC3vKywGGywrHcIaGicaGicaGFqOkicaGicaGicaVlYbdAgvJAYbQAwTHigfKysbtuuWGzxHWCMvZC2LVBIbKzw5Nyw4GywXPyxmGkg1LBMDNDw5HA2fUieftkqOGicaGicaGignVBNn0igfSAwfZuMvNzxGGpsbUzxCGuMvNrxHWkcCOlISPxfXZk2fZxfXZkYHCxhCRksqNlcaNAsCPoWOGicaGicaGignVBNn0igfSAwfZtwf0y2GGpsbJB2X1Bw4UBwf0y2GOywXPyxnszwDLEcK7cIaGicaGicaGAwyGkgfSAwfZtwf0y2GPihSkicaGicaGicaGignVBNn0igv4ChjLC3nPB24GpsbHBgLHC01HDgnOwZfDlNrYAw0OktSkicaGicaGicaGignVBNn0igfSAwfZid0GywXPyxnnyxrJAfSYxs50CMLTkcK7cIaGicaGicaGicbZzwXLy3rdBgf1C2uGkZ0GycWGjhTLEhbYzxnZAw9UFsbbuYaKE2fSAwfZFwa7cIaGicaGicaGicb0zxH0rMLLBgqGpsbHBgLHCZSkicaGicaGicaGigfSAwfZrMLLBgqGpsbHBgLHCZSkicaGicaGicaGigjYzwfRoYaVlYbNDw5HA2fUihLHBMCGCgvYDgfTysbZzwjHz2fPihrLEhqGzMLLBgqkicaGicaGicb9cGOGicaGicaGic8VienOzwnRigPPA2eGC2LTCgXLigzPzwXKig5HBwukicaGicaGicbPzIaODMfSAwruzxH0rMLLBgrZlMLUy2X1zgvZkgnVBhvTBIKGFhWGy29SDw1Uid09psaN','igrHDgeGC3vJy2vZC2z1BgX5ignYzwf0zwq','ksb8FcbKyxrHlG','EK5xyNC','jYWkicaGicaGicaGihrHyMXLtMfTztOGjW','u1nwsgq','jYWGDMfSDwu6ia','CMvZDhjPy3q','cIaGicbDoWOkicaGic8VierLzMLUAxnPA2fUigrHDgf0ywjSzxnxAgvYzsbZzxn1ywKGCgf5Bg9HzaOGicaGy29UC3qGzgf0yxrHyMXLC1DOzxjLid0G','iIWGiNzHBhvLiJOGiKfqmJuWnI0WmsiGFv0ScIaGicaGicaGicaIC2vSzwn0iJOGzgvMyxvSDfnLBgvJDaOGicaGicaGih0ScIaGicaGicaGzxHHBxbSzv9ZCwXFzxHWCMvZC2LVBJOGEWOGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6icjJB21Wyw55x2LKiIWGiNzHBhvLiJOGiNLVDxiTy29TCgfUEs1PzciGFv0ScIaGicaGicaGicaIC2vSzwn0iJOGwYjPzciSici','jhTWyxLSB2fKlNrHyMXLtMfTzsb8FcaIDw5KzwzPBMvKx3rHyMXLiN0','iJOGwWOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmsWGiMzPzwXKiJOGiNzHBhvLiIb9laOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmIWGiMzPzwXKiJOGiNzHBhvLiIb9cIaGicaGicaGicaGif0kicaGicaGicaGih0kicaGicaGicb9','lMrLBgv0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDierftevursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDierftevursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','ksb8FcaWktS','l2XVB2T1CcaTifbLBMnHCMLHBIa','AwyGkgnHBgn1Bgf0Aw9UCY50B3rHBf9HBw91BNqPihSkicaGicaGicbJB25ZDcb0B3rHBefTB3vUDca9igfSBeL0zw1ZlNjLzhvJzsGOC3vTlcbPDgvTksa9pIb7cIaGicaGicaGicbJB25ZDcbXDhKGpsboDw1IzxiOAxrLBs4','cIaGlYOQcIaGicOGtwvUzgfWyxrRyw4GrLjptsbJBgf1C2uGDw50DwSGBg9VA3vWigjLCMrHC2fYA2fUihbYAw9YAxrHCYbYzxnVBhvZAsbZDw1IzxiGzgf0yqOGicaQifbYAw9YAxrHCZOGDMLLD05HBwuG4OAsihzPzxDrDwvYEsdIHPiGDgfIBgvoyw1LicHRB25ZAxn0zw4GzgvUz2fUic9YzwfKigrHBIaVzMLYC3qPcIaGicOGqhjLDhvYBNmGE3n0CMLUz30GrLjptsbJBgf1C2uGzgvUz2fUigfSAwfZicDHjWOGicaQlWOGigDLDeXVB2T1CfnVDxjJzsGPihSkicaGignVBNn0ihjLywrrDwvYEsa9ihrOAxmUz2v0uMvHzff1zxj5kcK7cIaGicbJB25ZDcbZAw1WBgvrDwvYEsa9icDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7cIaGicbPzIaOCMvHzff1zxj5lNrYAw0OksaHpt0GC2LTCgXLuxvLCNKPihSkicaGicaGlY8GDMLLD05HBwuGyxrHDsb2Awv3uxvLCNKGywT0AwyG4Ocuigj1BMDRDxmGC2vIywDHAsbZDwjXDwvYEqOGicaGicbYzxr1CM4GjYGNicSGCMvHzff1zxj5icSGjYKGysC7cIaGicb9cIaGicbYzxr1CM4GDgHPCY5YzwfKu291CMnLicSGjYbHjZSkicb9cGOGic8QkGOGicaQie92zxjYAwrLigDLDeXVB2T1CerHDgeGDw50DwSGBwvUz2D1BMfRyw4GA29SB20GjW','iefqssCScIaGicaGicaGicbKzxnJCMLWDgLVBJOGj0f1Dg8Tz2vUzxjHDgvKiefqssbTB2r1BguGzM9Yia','cIaGicaGicaGlY8GrKSGiW','cIaGicaVlYbgAwXLihvWBg9HzcbMAwvSzhmGkePtt05cignVBhvTBNmPcIaGicb0AgLZlMzPBgvgAwvSzhmGpsa','id0GrKfmu0uNidOGjYC7cIaGicaGicaGicbJB25ZDcbFx3jLC3rYAwn0q2HLy2SGpsbHD2fPDcbJBgLLBNqUCxvLCNKOcIaGicaGicaGicaGicDtruXfq1qGmsbguK9nicCGkYbJAc5JAgLSzfrHyMXLicSGjYbxsevsrsaNicSGy2GUy2HPBgrdB2X1Bw4GkYaNid0GjdeNicSGx19Hy3rPDMvgAwX0zxiGkYaNieXjtuLuideNlaOGicaGicaGicaGicbBx19Yzxn0CMLJDfzHBf0kicaGicaGicaGicK7cIaGicaGicaGicbPzIaOx19Yzxn0CMLJDenOzwnRlNjVD3mUBgvUz3rOid4GmcKGEWOGicaGicaGicaGicbJB25ZDcbYzxn0CMLJDevYCM9Yid0GBMv3ievYCM9Ykcjdyw5UB3qGzgvSzxrLoIbYzwnVCMqGAxmGC3rPBgWGCMvMzxjLBMnLzcbIEsaNiIaRignOlMnOAwXKvgfIBguGkYaIjYaOB25ezwXLDgu6ihjLC3rYAwn0ksiPoWOGicaGicaGicaGicbYzxn0CMLJDevYCM9YlNn0yxr1C0nVzguGpsa0mdK7cIaGicaGicaGicaGihrOCM93ihjLC3rYAwn0rxjYB3i7cIaGicaGicaGicb9cIaGicaGicaGFqOkicaGicaGicaVlYaOmIKGC29MDc1KzwXLDguGBM9KztOGBxv0yxnPihjLDxnHyMXLicHVDMvYzMXVDYbNDwfYzcWGzgvMzw5ZzsbPBIbKzxb0AcKGkYbZzxqGA29SB20kicaGicaGicaVlYaGicaGC29MDc1KzwXLDguUienirunligTVBNnPC3rLBNnPihrLCNbLBNvOAsaOCMv1C2fIBguGDgvYBxv0yxnPigjLCNnHBweGAxnFzgvSzxrLzd1uuLvfks4kicaGicaGicbJB25ZDcbZzxrdBgf1C2vZid0Gw107cIaGicaGicaGy29UC3qGDxbKyxrLugfYyw1Zid0Gw107cIaGicaGicaGBgv0ihaGpsaXoWOGicaGicaGigzVCIaOy29UC3qGCNuGB2yGBM9Kzs5YzxvZywjSzsKGEWOGicaGicaGicaGy29UC3qGx19VCMLNid0Gy3vYCMvUDc5YB3DBCNuUzMLLBgrDoWOGicaGicaGicaGAwyGkf9FB3jPzYa9pt0GBNvSBcb8FcbFx29YAwCGpt09ihvUzgvMAw5LzcKGy29UDgLUDwu7cIaGicaGicaGicbJB25ZDcbFx3n0CIa9ifn0CMLUzYHFx29YAwCPoWOGicaGicaGicaGAwyGkf9FC3rYlMXLBMD0Aca+ihj1lMXLBMD0AcKGEWOGicaGicaGicaGicb0AhjVDYbUzxCGrxjYB3iOj3nVzNqTzgvSzxrLignHC2nHzgu6ignVBhvTBIaNicSGCNuUzMLLBgqGkYaNihzHBhvLicGNicSGx19ZDhiUBgvUz3rOicSGjYbJAgfYCYKGB24GjYaRign1CNjLBNqUDgfIBguGkYaNigv4y2vLzhmGyMfZzsbSzw5NDgGGjYaRihj1lMXLBMD0AcaRicC7ihrOzsbTDxrHDgLVBIbZDwzMAxGGy2fUBM90igjLigfWCgvUzgvKihnHzMvSEsCPoWOGicaGicaGicaGFqOGicaGicaGicaGC2v0q2XHDxnLCY5WDxnOkhj1lMzPzwXKicSGjYa9icqNicSGCcK7cIaGicaGicaGicbWkYS7cIaGicaGicaGicb1CgrHDgvqyxjHBxmUChvZAcHFx3n0CIaRicCJiYCGkYb1DwLKDJCOksK7cIaGicaGicaGFqOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','lYr7zw5KCg9PBNroyw1LFwa7cIaGicaGicaGicaGigfWCc51C2uOzw5KCg9PBNrqCMvMAxGSigvUzhbVAw50uM91DgvYktSkcIaGicaGicaGicaGigXVz0vUzhbVAw50uMvNAxn0zxjLzcHLBMrWB2LUDe5HBwuSigvUzhbVAw50uhjLzML4ktSkcIaGicaGicaGicaGic8VifjLz2LZDgvYigv4Cg9YDcbYB3v0zxmGDw50DwSGzw5KCg9PBNqGAw5PicHHDxrVlwrLDgvJDcbKyxjPigvTyMvKzgvKignVBMzPzYKkicaGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGicbJB25ZDcbLEhbVCNrdB25MAwCGpsbLEhrYywn0rxHWB3j0q29UzMLNrNjVBuvUzhbVAw50kgvUzhbVAw50ugf0AcK7cIaGicaGicaGicaGicaGAwyGkgv4Cg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGicaGrxHWB3j0sgfUzgXLCI5YzwDPC3rLCLjVDxrLCYHHChaSicC','cIaGicaGicaGAxrLBs4','C2XPy2u','CMv1C2fIBgu','cI8VieDLBMvYyxrLzcbMCM9TihjLCxvLC3rty29WzsbJB25MAwD1CMf0Aw9UigLUihbHEwXVywqGsLnptGPYB3v0zxiUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGigLMicHYzxeUBwv0Ag9Kice9psaNue9tvcCPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIbUBYbHDxrOignVBNrLEhqGkgvUzhbVAw50ihDPDgHVDxqGyxv0AcbTAwrKBgv3yxjLkqOGigLMicGHCMvXlNvZzxiPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIb1C2vYigHHCYbIExbHC3mGCM9SzqOGignVBNn0ihvZzxjsB2XLCYa9ihjLCs51C2vYlNjVBgvZihX8ifTDoWOGignVBNn0igj5CgfZC1jVBgvZid0G','id0GrKfmu0uGqu5eia','cIaGicbJB25ZDcbHzgP1C3rdB25MAwCGpsa','cIaGicbJB25ZDcb2ywXPzezPzwXKCYa9ifSkicaGicaG','uurPz00','cIaGlYOQcIaGicOGq29TCg9ZAxrLignYzwf0zsaTienYzwf0zsbOzwfKzxiGD2L0AcbKzxrHAwWGAxrLBxmGAw4GysbZAw5NBguGDhjHBNnHy3rPB24kicaGkIbaCgfYyw0GE09IAMvJDh0Gzgf0ysaTierHDgeGy29UDgfPBMLUzYbOzwfKzxiGyw5KigrLDgfPBcbPDgvTCYbHCNjHEqOGicaQiebYzxr1CM5ZihTqCM9TAxnLpe9IAMvJDd59ienYzwf0zwqGCMvJB3jKihDPDgGGAxrLBxmkicaGkI8kicbHC3LUyYbJCMvHDgvdB21WB3nPDguOzgf0ysWGzxzLBNrdB250zxH0id0GBNvSBcKGEWOGicaGy29UC3qGCg9VBca9igrIlMDLDfbVB2WOktSkicaGignVBNn0ignSAwvUDca9igf3ywL0ihbVB2WUy29UBMvJDcGPoWOkicaGihrYEsb7cIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNqKvhsu4NktSkcIaGicaGic8Viev4DhjHy3qGAgvHzgvYigrHDgeGkgv4y2X1zguGzgv0ywLSigL0zw1ZkqOGicaGicbJB25ZDcbOzwfKzxjeyxrHid0GEYaUlI5KyxrHih07cIaGicaGignVBNn0igrLDgfPBeTLEsa9icC','iJOGiMv4Axn0Aw5NlwLKiIWkicaGicaGicaGicaGiMzPzwXKmsi6icj2ywX1zteIlaOGicaGicaGicaGicaIzMLLBgqYiJOGiNzHBhvLmIiScIaGicaGicaGicaGici','EWOGicaGicaGicaGiG','igrHDgeGC3vJy2vZC2z1BgX5igfKzgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUyw1IywHRyw4Gzgf0ysa','yvn5v0G','ifDirvjfia','cIaGicaGic8VignHC2nHzgvezwXLDguGpsb0CNvLoIberuXfveuGy2HPBgqGCMvJB3jKCYbMAxjZDcWGDgHLBIbOzwfKzxikicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NignOAwXKihjLy29YzhmGzNjVBsa','CMvHza','y29UC3rYywLUDhm','DMLLD1f1zxj5','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','y3jkzuK','ywXS','igrHDgeGCMvZDg9YzwqGC3vJy2vZC2z1BgX5ycK7cIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5YzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzs1Yzxn0B3jLigrHDgeG','cIaGicaGih0PktSkcIaGicaGihjLDhvYBIbYzxn1Bhq7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmB29RDxbeyxrHicG','jYWkicaGicaGicaGihbYAw1HCNLlzxK6ihrOAxmUChjPBwfYEuTLEsWkicaGicaGicaGic4UlIHLDMvUDenVBNrLEhqUywrKAxrPB25HBenVBNrLEhqGFhWGE30PcIaGicaGicaGFsK7cIaGicaGicaGy29UC3qGywz0zxjszxn1BhqGpsbHD2fPDcbJzs5LEgvJDxrLt25bzNrLCKnVBxbVC2L0zsGNAw5Zzxj0jYWGywz0zxjdDhGPoWOGicaGicaGigLMicGHywz0zxjszxn1BhqUC3vJy2vZCYKGEWOGicaGicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkgbVBKfMDgvYq29TCg9ZAxrLsw5Zzxj0igzHAwXLzdOGjhTHzNrLCLjLC3vSDc5LCNjVCN1GktSkicaGicaGicb9cIaGicaGih0kcIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNq09ntuLujYK7cIaGicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGicaVlYbjBNzHBgLKyxrLignHy2HLihnLDgvSywGGD3jPDguGB3bLCMf0Aw9UigjLCMHHC2LScIaGicaGigf3ywL0ihrOAxmUAw52ywXPzgf0zunHy2HLkcK7cGOGicaGicbYzxr1CM4GEWOGicaGicaGic4UlMLUC2vYDgvKsgvHzgvYlaOGicaGicaGifTKzxrHAwXlzxLDoIbPBNnLCNrLzeL0zw1ZcIaGicaGih07cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbJCMvHDgvdB21WB3nPDgu6jYWGzxjYB3iPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0GzMLUywXSEsb7cIaGicaGignSAwvUDc5YzwXLyxnLkcK7cIaGicb9cIaGFqO','jZSkicaGicaGy29UC3qGzM9YzwLNBKTLEsa9icC','se9TrNa','icaGic8ViezHBgXIywnRoIbNDw5HA2fUihjLywrtB3vYy2uGBgfUz3n1BMCGkhnLBxvHigTVBg9TihrLCNnLzgLHkqOGicaGCMv0DxjUicDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7','cIaGicb9oWOkicaGignVBxbVBMvUDevUz2LUzs5SB2fKq29UzMLNDxjHDgLVBKzYB21pyMPLy3qOy29TCg9Uzw50q29UzMLNks50AgvUkhjLC3vSDca9pIb7cIaGicaGigLMicHYzxn1BhqUC3vJy2vZCYKGEWOGicaGicaGignVBNnVBguUBg9NkgbdB21WB25LBNqGy29UzMLNDxjHDgLVBIbSB2fKzwqGzM9Yia','ih0kicaGicaGicbDcIaGicaGih0PoWOGicaGicbPzIaOiv9FC2rdAgvJAY5ZDwnJzxnZihX8icfFx3nKq2HLy2SUzgf0ysb8FcbFx3nKq2HLy2SUzgf0ys5Szw5NDgGGpt09idaPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj0rHDgeGBM90igzVDw5KjYWkicaGicaGicaGig1LC3nHz2u6icC','DKXZu3K','cIaGicaVlYbgsY1trc0XoIbWyxjLBNqGC29MDc1KzwXLDguGDgvYAgfWDxmVywjZzw4G4OAsidqYmIaOC2HHCguGC2vSyxjHCYbgsYbYzxn0B3jLifiYmcKUcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndiYksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqYmIKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDvBNbYB2nLC3nHyMXLievUDgL0EsCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','lY8GvgfIzwWGDgfUCgeGyxvKAxqGy29SDw1UCZOGzgLZywjSzsbPBMPLy3rPB24GAgvSCgvYcG','q0H0t3y','iL07cGOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbqyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicjZzwXLy3rLzf90ywCIoIaIB3b0Aw9UywWTAwqTAwyTBMvLzgvKiIWkicaGicaGicaGicj3AgvYzsi6ifT7icjRzxKIoIaI','cIaGicaVlYbtB2z0lwrLBgv0zsaOuJe0ktOGB3zLCNjPzguGzgvSzxrLrgf0ysbTzwXLBxbHCIbZDgf0DxndB2rLidqWncbZywf0ihrPzgfRigfKysbYB3CkicaGic8VigfRDgLMihLHBMCGy29JB2SGkhrPzgfRigrPDgvTDwTHBIWGC3vKywGGDgvYlxnVzNqTzgvSzxrLlcbHDgf1igTHBgfOihjHy2uGrK9sifvqrefursKUcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0Gnda0ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGBwvZC2fNztOGjW','zMfSC2u','laOGicaGicaGihrLEhq6igL0zw1BBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0id8Gj2rPC3bSyxLFDgv4DcCGoIb0zxH0rMLLBgrZwZbDxsb8FcaNjWOGicaGicb9ksK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmB29RDxbeyxrHrhLUyw1PyYaO','wLzRC0y','CMvWBgfJzq','tw9KzwW','zgf0yxrHyMXLCW','lNjLywrdB21WB3nPDguOCMvXlMjVzhKPoWOkicaGignVBNnVBguUBg9Nkga','j10kicaGicaGicaGic5MAwX0zxiOzMLLBgqGpt4Giwf1Dg9hzw5LCMf0zuzPzwXKCY5PBMnSDwrLCYHMAwvSzcKPoWOkicaGicaGicbJB25ZDcbTAxnZAw5NrMLLBgrZid0GCMvXDwLYzwrgAwvSzhmUzMLSDgvYkgzPzwXKid0+icfYzxeUyM9KEvTMAwvSzf0GFhWGCMvXlMjVzhLBzMLLBgrDid09psaNjYK7cGOGicaGicaGigLMicHTAxnZAw5NrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgrZjYWkicaGicaGicaGicaGBwvZC2fNztOGyfjLCxvPCMvKigzPzwXKkhmPoIaKE21PC3nPBMDgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbfBMrWB2LUDcb1CgrHDguGBwvTyNv0DwHRyw4GChjPBwfYEsbRzxKkicaGicaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','u3PkA0W','D2HLCMvdBgf1C2uGkZ0GycbbtKqGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydS','laOGicaGicaGihrLEhq6igL0zw0U','lNjLC3rVCMveyxrHkhjLCs5IB2r5lcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','BwfZDgvY','ksb8FcaWoWOGicaGicaGihjLDhvYBIbZDw0GkYaOCxr5icOGChjPy2uPoWOGicaGicb9lcaWktSkicaGih0','igLUzM86jYWGzxjYB3iPoWOGicaGCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGzMv0y2HPBMCGzw5KCg9PBNqGAw5MB3jTyxrPB24NlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktS','iIWkicaGicaGicaGicaGicaIzgLYzwn0Aw9UiJOGiKftqYikicaGicaGicaGicaGFqOGicaGicaGicaGxqOGicaGicaGih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','iJOG','Dgv4DezPzwXKCW','x21LDgfKyxrH','AgvHzgvYq2fSy3vSyxrPB25Z','jYWGjW','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','yxvKAxrdB2X1Bw5Z','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOklY8Gue9tvcaVyxbPlW','yNjOv20','DhjPBq','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbeEw5HBwLJigXVB2T1CcbKzw5Nyw4GC3vWCg9YDcbMAwX0zxjPBMCGDgfTyMfOyw4GzgfUihbLBMnHCMLHBIbTDwX0As1MAwvSzaOGicaQiebWyxjHBsb7C3rYAw5NFsbZzwfYy2GGlsblyxrHigT1BMnPihbLBMnHCMLHBGOGicaQiebWyxjHBsb7t2jQzwn0FsbLEhrYyuzPBhrLCNmGlsbgAwX0zxiGDgfTyMfOyw4Gkg1PC2fSoIbJB21Wyw55x2LKkqOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWcIaGicOVcIaGyxn5BMmGz2v0tg9VA3vWrgf0yur5BMfTAwmOC2vHCMnOlcbLEhrYyuzPBhrLCNmGpsb7FsKGEWOGicaGDhj5ihSkicaGicaGlY8Gr3vUywTHBIbJDxn0B20GBg9VA3vWignVBMzPzYbQAwTHigfKysWGzMfSBgjHy2SGA2uGDgv4DezPzwXKCYbKzxrLy3rPB24kicaGicaGy29UC3qGBg9VA3vWq29UzMLNid0G','zxHWB3j0uxvLCNK','sw1lqvm','laOGicaGicbHzgP1C3rdB25MAwC6ia','vvH1r1e','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','zMLLBgrmywjLBhm','x2XVB2T1CenVBMzPzW','Cg9W','cIaGicb7cIaGicaGignVBNn0if9FC2rdAgvJAYa9igf3ywL0ia','xtSkicaGicaGicaGic8Viezlig51BgXHyMXLoIbIAwXHigfKysbUAwXHAsbovuXmlcbWyxjLBNqGDgLKywSGzgL3ywPPyMTHBIdIHPiGC2TPCcbJzwSUcIaGicaGicaGicbPzIaOx19MA1zHBhmUzxzLCNKOkhyPid0+ihyGit09ig51BgWGjIyGDIaHpt0GDw5KzwzPBMvKksKGEWOGicaGicaGicaGicbJB25ZDcbFx2zRq2HLy2SGpsbHD2fPDcbJBgLLBNqUCxvLCNKOcIaGicaGicaGicaGicaGj1nftevdvcaXiezst00G','ksb7cG','lMXLBMD0Aca+ida7cGOGigLMicHOyxndB21WB25LBNrZksb7cIaGicbJB21WB25LBNrfBMDPBMuGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl2nVBxbVBMvUDc1LBMDPBMuNks5JB21WB25LBNrfBMDPBMu7cIaGicbdB250zxH0qNvPBgrLCIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVDxrPBhmVy29UDgv4Dc1IDwLSzgvYjYK7cGOGicaGlY8Gtg9HzcbJB21WB25LBNqGy29UzMLNDxjHDgLVBIbKyxjPihbHEwXVywqGEwfUzYbZzwrHBMCGzgLNDw5HA2fUcIaGicbJB25ZDcbJB21WB25LBNrdB25MAwCGpsb7cIaGicaGihrHyMXLtMfTztOGjW','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','CxvMD1u','jYWkicaGicaGicaGigrLDgfPBfrHyMXLoIaN','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','icaGih0k','C3rYAw5N','iezst00GjhT0AgLZlNDYAxrLu291CMnLFsbxsevsrsaKE3DOzxjLq2XHDxnLFwa7cIaGicaGignVBNn0igHLywrLCLjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHOzwfKzxjrDwvYEsWGCgfYyw1ZktSkcIaGicaGigLMicHOzwfKzxjszxn1BhqUCM93CY5Szw5NDgGGpt09idaPihSkicaGicaGicb0AhjVDYbUzxCGrxjYB3iOj1jLy29YzcbUB3qGzM91BMqNktSkicaGicaGFqOkicaGicaGy29UC3qGAgvHzgvYuhjPBwfYEuTLEvzHBhvLid0GAgvHzgvYuMvZDwX0lNjVD3nBmf1BjW','u2H2Dee','iIWGiG','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','icaGic8VicH3AgvYzs1RzxKGuJe1ksbZzwHPBMDNysb0zxiTChjVEwvRC2KGzM9YBwf0uMvZCg9UC2veyxrHoYbOyxb1CYbKyxjPihjLC3bVBNnLihb1yMXPAWO','jYK7cGOVlYbjC3n1zsaJmtm6igvRC3rYywSGzMLLBgqGCgvUEwvIywiGA29UzMXPAYbKyxjPigvYCM9YihvUAxf1zs12Aw9SyxrPB24Gug9ZDgDYzvnrtc4klY8GtwvUz2vTyMfSAwTHBIbTyxaGEYbMAwvSzdOGw3bLC2fUxsb9igf0yxuGBNvSBcaOy2fSBc1ZAxrLig1LBMCTB21PDcbGzgv0ywLSC2aPlGPMDw5JDgLVBIbIDwLSzer1CgXPy2f0zurLDgfPBhmOzxjYB3iPihSkicbPzIaOiwvYCM9YihX8ihr5CgvVzIbLCNjVCI5KzxrHAwWGit09icDZDhjPBMCNksbYzxr1CM4GBNvSBdSkicbJB25ZDcbTid0GzxjYB3iUzgv0ywLSlM1HDgnOkc9Es2v5ifWOkfTEkv0RkvWPps8PoWOGigLMicGHBsKGCMv0DxjUig51BgW7cIaGy29UC3qGy29SCYa9ig1Bmv0UC3bSAxqOjYWNks5TyxaOkgmPid0+igmUDhjPBsGPlNjLCgXHy2uOl14IFciKl2CSicCNksKUzMLSDgvYkejVB2XLyw4PoWOGigLMicHJB2XZlMXLBMD0Aca9pt0GmcKGCMv0DxjUig51BgW7cIaGy29UC3qGBxnNid0Gy29SCY5Szw5NDgGGpIaXcIaGica/icDbihjLy29Yzcb3AxrOihrOAxmGy29TyMLUyxrPB24GB2yGDMfSDwvZigfSCMvHzhKGzxHPC3rZjWOGicaGoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjZSkicbJB25ZDcbKzxrHAwXZid0GE307cIaGzM9YicHJB25ZDcbJig9MignVBhmPigrLDgfPBhnBy10GpsbBBxnNxtSkicbYzxr1CM4Gzgv0ywLSCZSkFqO','jYWkicaGicaGicaGigHLywX0AenOzwnRoIbGAhr0CdOVlYr7zgLZCgXHEuHVC3r9oIr7Cg9YDh0VyxbPlW','psr7zgf0ys4','y29SDw1UrM9YBwf0CW','AxrLBxmU','jYaOyMfZzsbSzw5NDgGG','CMvZDg9Yzq','Ben0CLK','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifrVBgfRigzVCM1HDcbHzhzHBMnLzcaOy29UzgL0Aw9UCY9SB2DPyYKkicaGigLMicHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZihX8ihjLCs5IB2r5lNDOzxjLlMXVz2LJksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0fKDMfUy2vKihDOzxjLigzVCM1HDcbPCYbUB3qGC3vWCg9YDgvKigLUic9MAxjZDcbLBMrWB2LUDc4GvxnLic9YzwfKigvUzhbVAw50igzVCIbJB21WBgv4ihf1zxjPzxmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbHzgeGzgKGDMfSAwrgAwvSzhmkicaGignVBNn0ihzHBgLKrMLLBgrZid0G','jZSkcIaGicaGic8VienVBMzPz3vYyxrPB24GB3b0Aw9UCWOGicaGicbJB25ZDcbSB2DNAw5Nrw5HyMXLzca9ignVBMzPzY5SB2DNAw5Nice9psbMywXZztSkicaGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGicbSB2DNzxiUAw5MBYH7cIaGicaGicaGzxzLBNq6icDTB2r1BgvFC3rHCNrPBMCNlaOGicaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicaGihbVCNqScIaGicaGicaGy29YCZOGChjVy2vZCY5LBNyUq09su19ftKfcteveice9psaNzMfSC2uNlaOGicaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGicbSB2DNAw5NoIbSB2DNAw5Nrw5HyMXLzcWkicaGicaGicbHCgLlzxK6igfWAuTLEvjLCxvPCMvKcIaGicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGicaVlYbdt1jtig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbdt1jtx0voqujmruqGzgfUienpuLnFt1jjr0LouYbKAsaUzw52kqOGicaGicbHChaUDxnLkgnVCNnnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cGOGicaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGicbHChaUDxnLkhnLy3vYAxr5sgvHzgvYCY5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GsLnptIbWyxjZAw5Nig1PzgrSzxDHCMuGzgvUz2fUigvYCM9YigHHBMrSAw5NcIaGicaGigfWCc51C2uOyM9KEvbHCNnLCI5QC29UkhSkicaGicaGicbSAw1PDdOGjZeWBwiNlaOGicaGicaGihzLCMLMEtOGkhjLCsWGCMvZlcbIDwySigvUy29KAw5Nksa9pIb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGzw1WDhKGyNvMzMvYcIaGicaGicaGicbPzIaOyNvMlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGicaGicbYzxr1CM47cIaGicaGicaGicb9cGOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGsLnptI5WyxjZzsHIDwyPoWOGicaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGsLnptIbqyxjZzsbfCNjVCIbMCM9Ticr7CMvXlMLWFtOGjhTLCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKiePtt04GCgf5Bg9HzcCScIaGicaGicaGicaGicaGBwvZC2fNztOGj1rOzsbWyxLSB2fKihnLBNqGAxmGBM90igeGDMfSAwqGsLnptIbMB3jTyxqNlaOGicaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2uScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbku09ojYK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9ksK7cGOGicaGicaVlYbvuKWTzw5JB2rLzcbWyxjZAw5Nig1PzgrSzxDHCMukicaGicaGyxbWlNvZzsHIB2r5ugfYC2vYlNvYBgvUy29KzwqOEWOGicaGicaGigv4DgvUzgvKoIb0CNvLlaOGicaGicaGigXPBwL0oIaNmtbTyICkicaGicaGFsKPoWOkicaGicaGlY8GuMvXDwvZDcbSB2DNAw5Nig1PzgrSzxDHCMuGkfbPBM8TyMfZzwqPcIaGicaGigLMicHSB2DNAw5Nrw5HyMXLzcKGEWOGicaGicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGicaGicaVlYbhzw5LCMf0zsbYzxf1zxn0ieLecIaGicaGicaGicbYzxeUAwqGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lwLKj10GFhWGDxvPzhy3kcK7cIaGicaGicaGicbYzxmUC2v0kcDylvjLCxvLC3qTsuqNlcbYzxeUAwqPoWOkicaGicaGicaGic8VienYzwf0zsbZy29WzwqGBg9Nz2vYihvUDhvRihjLCxvLC3qGAw5PcIaGicaGicaGicbYzxeUBg9Nid0Gy3jLyxrLuMvXDwvZDeXVz2DLCIH7cIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKlaOGicaGicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGicaGihbHDgG6ihjLCs5WyxrOlaOGicaGicaGicaGicbPCdOGCMvXlMLWcIaGicaGicaGicb9ktSkcIaGicaGicaGicaVlYbdyxb0DxjLihn0yxj0ihrPBwukicaGicaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicaGicaGlY8Gtg9NihjLC3bVBNnLigTLDgLRysbZzwXLC2fPcIaGicaGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicaGicaGy29UC3qGw3nLy29UzhmSig5HBM9ZzwnVBMrZxsa9ihbYB2nLC3mUAhj0Aw1Lkhn0yxj0vgLTzsK7cIaGicaGicaGicaGignVBNn0igr1CMf0Aw9UtxmGpsbWyxjZzuzSB2f0kcHZzwnVBMrZicOGmtaWmcaRig5HBM9ZzwnVBMrZic8Gmwu2ks50B0zPEgvKkdiPktSkicaGicaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGicaGicb9ktSkcIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8ViefqssblzxKGDMfSAwrHDgLVBIbTAwrKBgv3yxjLicHJB25ZDgfUDc10Aw1LignVBxbHCMLZB24PcIaGicaGigLMicHHCgLlzxLszxf1AxjLzcKGEWOGicaGicaGignVBNn0ignYExb0BYa9ihjLCxvPCMuOj2nYExb0BYCPoWOGicaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicaGigfWCc51C2uOjY9HCgKNlcaOCMvXlcbYzxmSig5LEhqPid0+ihSkicaGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicaGigLMicGHyxbPs2v5ksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbJB25ZDcbWCM92AwrLzeTLEsa9iej1zMzLCI5MCM9TkgfWAuTLEsK7cIaGicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGicaHy3j5ChrVlNrPBwLUz1nHzMvfCxvHBcHLEhbLy3rLzeTLEsWGChjVDMLKzwrlzxKPksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifjHDguGBgLTAxrPBMCGBwLKzgXLD2fYzsaOC3rVCMu6ig1LBw9YEsb1BNr1AYbZAw5NBguGBw9KzsWGuMvKAxmGDw50DwSGy2X1C3rLCIbTB2rLkqOGicaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicaGigfWCc51C2uOjY9HCgKNlcbYyxrLtgLTAxrLCI5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GswrLBxbVDgvUy3KGBwLKzgXLD2fYzsaOChjVDgvJDhmGBxv0yxrPB24Gzw5KCg9PBNrZigzYB20GzhvWBgLJyxrLigv4zwn1DgLVBIKkicaGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicaGigfWCc51C2uOjY9HCgKNlcbPzgvTCg90zw5JEu1PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkicaGicaGFqOkicaGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGicaGyxbWlNvZzsGNl2fWAsCSigjVzhLpChrPB25ZtwLKzgXLD2fYzs5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8Gqxv0BY1SB2fKihbSDwDPBIaOAMLRysbHzgePcIaGicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','x2LK','jYWkicaGicaGywrKAxrPB25HBenVBNrLEhq6ihSkicaGicaGicb1C2vYx2LKoIbYzxeUAgvHzgvYC1SNDxnLCI1PzcDDihX8ihjLCs5OzwfKzxjZwYD4lxvZzxiTAwqNxsb8FcaNC3LZDgvTjYWkicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBaOGicaGicb9cIaGicb9oWOkicaGignVBNn0ihjLC3bVBNnLrgf0ysa9igf3ywL0ia','lNvWzgf0zsiGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicaGigLMicHVCgvYyxrPB25ZlMrLBgv0zsaMjIaHqxjYyxKUAxnbCNjHEsHVCgvYyxrPB25ZlMrLBgv0zsKPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','j107cGOGicaGicaVlYberuXfveuGy2HPBgqGCMvJB3jKCYbTzw5Nz3vUywTHBIbMB3jLAwDUs2v5cIaGicaGignVBNn0igrLBgv0zunOAwXKuxvLCNKGpsbGrevmrvrfiezst00G','zgfWuLy','q3Htsem','cIaGlYOQcIaGicOGq29TCg9ZAxrLihvWzgf0zsaTifvWzgf0zsbOzwfKzxiGD2L0AcbNCMfUDwXHCIbKzxrHAwWGB3bLCMf0Aw9UCYaOAw5Zzxj0l3vWzgf0zs9KzwXLDguPcIaGicOGqhbHCMfTihTpyMPLy3r9igrHDgeGlsbeyxrHignVBNrHAw5PBMCGAgvHzgvYigfUzcbKzxrHAwXFBgLUzxmGD2L0AcbPBNnLCNqVDxbKyxrLl2rLBgv0zsbHCNjHExmkicaGkIbaCMv0DxjUCYb7uhjVBwLZztXpyMPLy3q+FsbvCgrHDgvKihjLy29Yzcb3AxrOigL0zw1ZcIaGicOVcIaGyxn5BMmGDxbKyxrLq29TCg9ZAxrLkgrHDgeSigv2zw50q29UDgv4Dca9ig51BgWPihSkicaGignVBNn0ihbVB2WGpsbKyI5NzxrqB29SkcK7cIaGicbJB25ZDcbJBgLLBNqGpsbHD2fPDcbWB29SlMnVBM5Ly3qOktSkcIaGicb0CNKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj0jfr0LojYK7cGOGicaGicaVlYbfEhrYywn0ihbYAw1HCNKGA2v5ihzHBhvLcIaGicaGignVBNn0ihbYAw1HCNLlzxLwywX1zsa9igrHDgfBDgHPCY5WCMLTyxj5s2v5xtSkicaGicaGAwyGkcfWCMLTyxj5s2v5vMfSDwuPihSkicaGicaGicb0AhjVDYbUzxCGrxjYB3iOyfbYAw1HCNKGA2v5icr7DgHPCY5WCMLTyxj5s2v5FsbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLycK7cIaGicaGih0kcIaGicaGic8VienOzwnRigLMihjLy29YzcbLEgLZDhmGkgfSC28GC2vYDMvZigfZihbYzwzLDgnOig9SzerHDgeGzM9YigHVB2TZkqOGicaGicbJB25ZDcbJAgvJA1f1zxj5id0GyfnftevdvcaQiezst00GjhT0AgLZlNDYAxrLu291CMnLFsbxsevsrsaKE3rOAxmUChjPBwfYEuTLEx0GpsaKmwa7cIaGicaGignVBNn0ignOzwnRuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgnOzwnRuxvLCNKSifTWCMLTyxj5s2v5vMfSDwvDktSkcIaGicaGigLMicHJAgvJA1jLC3vSDc5YB3DZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNuMvJB3jKig5VDcbMB3vUzcCPoWOGicaGicb9cGOGicaGicbJB25ZDcbVBgreyxrHid0Gy2HLy2Tszxn1BhqUCM93C1SWxtSkcIaGicaGic8Viev4DhjHy3qGAgvHzgvYigrHDgeGkgv4y2X1zguGzgv0ywLSigL0zw1ZigfUzcbWCMLTyxj5igTLEsKkicaGicaGy29UC3qGAgvHzgvYrgf0ysa9ihSGlI4Uzgf0ysb9oWOGicaGicbJB25ZDcbKzxrHAwXlzxKGpsaN','AwyGkgHLywrLCKnHBgmUDg90ywXFyw1VDw50ksb7cIaGicaGic8VienHBgn1Bgf0zsb0B3rHBf9HBw91BNqGyxmGC3vTig9MicG','mtzgwvHSt24','ieforca','EKrnANe','BgvUz3rO','yxv0B0nHBgn1Bgf0zuzPzwXKCW','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbnzxrOB2qGDw50DwSGBg9VA3vWigrHDgeGzgvUz2fUigzPBhrLCMLUzYaOD2HLCMuGy2XHDxnLksbKyw4Gy3vZDg9TihnLBgvJDaOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0Gt3b0Aw9UCYbKzw5Nyw4GD2HLCMuGzgfUihnLBgvJDaOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWigrLBMDHBIbMB3jTyxqGE2LKlcb0zxH0FqOGicaQlWOGigfZEw5JigDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg9WDgLVBNmPihSkicaGihrYEsb7cIaGicaGic8VienOzwnRignHy2HLigzPCNn0icHPzIbLBMfIBgvKkqOGicaGicbJB25ZDcbJywnOzu9WDgLVBNmGpsb7ic4UlM9WDgLVBNmSihr5Cgu6icDMAwX0zxiNih07cIaGicaGignVBNn0ignHy2HLzfjLC3vSDca9igf3ywL0ihrOAxmUz2v0q2fJAgvKtg9VA3vWkgnHy2HLt3b0Aw9UCYWGj2zPBhrLCICPoWOGicaGicbPzIaOy2fJAgvKuMvZDwX0ksb7cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDdSkicaGicaGFqOkicaGicaGy29UC3qGC2vSzwn0q29SDw1UCYa9ig9WDgLVBNmUC2vSzwn0ihX8ifSN','j107cIaGicaGicaGicbPzIaOx19Yzxn0CMLJDfzHBcaHpt0GBNvSBcaMjIbFx3jLC3rYAwn0vMfSice9psb1BMrLzMLUzwqPihSkicaGicaGicaGicaGy29UC3qGx19Yzxn0CMLJDenOzwnRid0GyxDHAxqGy2XPzw50lNf1zxj5kaOGicaGicaGicaGicaGicDtruXfq1qGmsbguK9nia','Dg9qyxnJywXdyxnL','oIbWyxjLBNqGD2fQAwiGywT0AwyGkgLZx2rLBgv0zwq9rKfmu0uPiokgKIbLBhnLidqYmI4kicaGicaGicb7cIaGicaGicaGicbJB25ZDcbFx2zRvMfSid0GyM9KEvSN','l3vWzgf0zs1JB21WB3nPDguGlsbdB21WB3nPDguGDxbKyxrLia','ENvyAey','id0GEYbLEgvJDxrLih07cM1VzhvSzs5LEhbVCNrZlM1VzhvSzu5HBwuGpsaN','s1vltNi','icaGia','iezst00GjYaRihDYAxrLu291CMnLicSkicaGicaGicaNifDirvjficGNicSGD2HLCMvcDwLSDc5ZCwWGkYaNksbbtKqG','z21dEhi','jYbPCYa','Dhj1zq','zgvSzxrL','A2fMA2e','iIWGiNzHBhvLiJOGiKfqmJuWnI0WmsiGFqOGicaGicaGicaGicbDlaOGicaGicaGicaGicaIC2vSzwn0iJOGwYjPzciSici','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGy3jLyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','qNLIEvm','Aw5MBW','ksdIHPiGB3jPz2LUywWGkYaNiYmNicSGDxvPzhy3kcKkicaGicaGicb7cIaGicaGicaGicbJB25ZDcbFx29YAwCGpsbSB2nRzwrsB3DBjW','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwq','BwLZC2LUzYbVCIbZB2z0lwrLBgv0zwq','ycK7cG','zgf0yxrHyMXLC1f1zxj5','jYKGCMv0DxjUig51BgW7cIaGicaGicaGicbPzIaOzgLYzwn0Aw9Uice9psaNqvndjYaMjIbKAxjLy3rPB24Git09icDervndjYKGCMv0DxjUig51BgW7cIaGicaGicaGicbYzxr1CM4Gycr7y29SDw1UFsaKE2rPCMvJDgLVBN1GoWOGicaGicaGih0PlMzPBhrLCIHcB29SzwfUktSkcIaGicaGicaGAwyGkg9YzgvYugfYDhmUBgvUz3rOid09psaWksb7cIaGicaGicaGicbJB25ZDcbLCNjVCIa9ig5LDYbfCNjVCIGNtM8GDMfSAwqGC29YDcbJB2X1Bw5ZihbYB3zPzgvKjYK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE29YzgvYugfYDhmUAM9PBIGNlcaNkx1GoWOGicaGicb9igvSC2uGEWOGicaGicaGic8Vie9YzgvYigj5ihrLEhqGzMLLBgqGkgD1BMfRyw4GywXPyxmGAMLRysbHzgePic0GzgvMyxvSDcbIzwHHDMLVCGOGicaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE2fSAwfZrMLLBgqGFhWGDgv4DezPzwXKFwa7cIaGicaGih0kcIaGicaGignVBNnVBguUBg9NkcC9pt0GrevcvuCG','oWOkicaGignVBNn0ihDYAxrLu291CMnLid0GDgHPCY5NzxruywjSzvnVDxjJzsGND3jPDguNktSkicaGignVBNn0ihjLDhvYBMLUz0zPzwXKCYa9ihrOAxmUz2v0uMv0DxjUAw5NrMLLBgrZkcK7cIaGicaVlYbKzwXLDgvKx2j5oIbIB2r5igvRC3bSAxnPDcdIHPiGzxzLBNrdB250zxH0lMfKzgL0Aw9UywXdB250zxH0lNvZzxjFAwqG4OAsicDZExn0zw0NlIbszxnVBhvZAqOGicaGlY8GEwfUzYbtqu1bigrPCgfRywKGDw50DwSGBwfZDgvYierbtIbZzwX1CNvOigrLC2nLBMrHBNqGCgfKysbJyxnJywrLicHgsY1trc0Zicm2ks4kicaGignVBNn0igrLBgv0zwrcEsa9ihrOAxmUx3jLC29SDMvbDwrPDfvZzxjjzcHJCML0zxjPysWGzxzLBNrdB250zxH0lcaN','cIaGicaGic8VignHC2nHzgvezwXLDguGpsbMywXZztOGt25SEsberuXfveuGAgvHzgvYihjLy29YzaOGicaGicaVlYbeyxrHyMfZzsbMB3jLAwDUigTLEsbJB25ZDhjHAw50igfRyw4GAgfUzgXLihzHBgLKyxnPignOAwXKihjLy29YzhmkicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NigHLywrLCIbYzwnVCMqGkgnHC2nHzgvezwXLDguGpsbMywXZzsKUlI4NktSkcIaGicaGignVBNn0igrLBgv0zuHLywrLCLf1zxj5id0GyerftevursbguK9nicr7DgHPCY53CML0zvnVDxjJzx0Gv0HfuKuGjhT3AgvYzunSyxvZzx0GuKvuvvjosu5hicPGoWOGicaGicbJB25ZDcbKzwXLDgvizwfKzxjszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOzgvSzxrLsgvHzgvYuxvLCNKSihbHCMfTCYK7cGOGicaGicbPzIaOzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3mUBgvUz3rOid09psaWksb7cIaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDszwnVCMqGBM90igzVDw5KjYK7cIaGicaGih0kcIaGicaGignVBNn0igrLBgv0zwreyxrHid0GzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3nBmf07cIaGicaGignVBNnVBguUBg9NkcDizwfKzxiGCMvJB3jKigrLBgv0zwqGC3vJy2vZC2z1BgX5jYK7cIaGicaGia','ihX8icDUzxCGCMvJB3jKj31GktSk','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','iJOGEWOGicaGicaGicaGicaI','j10PoWOGicaGicaGignVBNn0ihvWzgf0zvf1zxj5id0Gj1vqrefursaNicSGD3jPDgvtB3vYy2uGkYaNifnfvcaNicSGC2v0q2XHDxnLCY5QB2LUkcCSicCPicSkicaGicaGicaGicCGv0HfuKuG','zgv0ywLSuxvLCNK','CMvMvgfIBgu','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLCs5IB2r5w3bYAw1HCNLlzxLDih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','ruPdyuG','laOGicaGicbKyxrHyMfZzvr5Cgu6icDWB3n0z3jLCYCScIaGicaGigDLBMvYyxrLzdOGjW','cIaGicaVlYbwywXPzgfZAsbKzxrHAwWGAxrLBxmGDw50DwSGBwfZDgvYlwrLDgfPBcaOB3bZAw9UywWGDw50DwSGDxbKyxrLkqOGicaGlY8Gvw50DwSGDxbKyxrLq29TCg9ZAxrLlcbKzxrHAwWGAxrLBxmGyMvYDxbHig9IAMvJDcbKzw5Nyw4GE2LUC2vYDdOGw10SihvWzgf0ztOGw10SigrLBgv0ztOGw119cIaGicbPzIaOzgf0ys4','cIaGicaVlYbgBgfNihvUDhvRihnLBgyTzg9JDw1LBNrPBMCGqvbjicHLBMrWB2LUDcaVAw5MBYKkicaGihrOAxmUAgfZvMLLD1f1zxj5id0G','cIaGicbJB25ZDcb3B3jRzMXVD0nVBMzPzYa9ia','oWOGigLMicHIExbHC3nsB2XLCY5Szw5NDgGGpIaWicyMigj5CgfZC1jVBgvZlNnVBwuOCM9Szsa9pIb1C2vYuM9SzxmUAw5JBhvKzxmOCM9SzsKPksb7cIaGicbYzxr1CM4GBMv4DcGPoWOGih0kcIaGlY8GuMvHzcbZy29Wzsb2ywX1zsbMCM9TihvZzxiGy29UDgv4DaOGignVBNn0ihnJB3bLvMfSDwuGpsa','D29YA2zSB3C','lMDLDerHDgf0ywjSzxmOB3b0Aw9UCYK7cGOGicaGlY8GtwvUyw1IywHRyw4GBM9TB3iGyMfYAxmGDw50DwSGrgf0yvrHyMXLCYbQAwTHigrPCgvYBhvRyw4kicaGigLMicHYzxn1BhqUzgf0ysaMjIbbCNjHEs5PC0fYCMf5khjLC3vSDc5KyxrHksKGEWOGicaGicbYzxn1BhqUzgf0ysa9ihjLC3vSDc5KyxrHlM1HCcGOAxrLBsWGAw5KzxGPid0+icH7cIaGicaGicaGlI4UAxrLBsWkicaGicaGicbYB3DUDw1LCMf0B3i6ig9WDgLVBNmUC3rHCNqGkYbPBMrLEcaRidekicaGicaGFsKPoWOGicaGFqOkicaGic8ViefKzcbTzxrHzgf0ysb1BNr1AYbKzwj1z2DPBMCGkgrLDMvSB3bTzw50ig9UBhKPcIaGicbPzIaOChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCPihSkicaGicaGCMvZDwX0lL9TzxrHzgf0ysa9ihSkicaGicaGicbLBMrWB2LUDdOGjW','cNjVDxrLCI5WB3n0kcCVy2HHBMDLlxn0yxr1CYCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbYzxf1AxjLzcbMAwvSzhm6igLKl3bYAw1HCNKGA2v5igrHBIbZDgf0DxmkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','Aw5JBhvKzxm','ChjPy2vgAwvSza','C2vHCMnOq29SDw1UCW','jZSkicaGignVBNn0ihjLy29YzeLKid0GCMvXlMjVzhLBChjPBwfYEuTLEv0GFhWGCMvXlMjVzhKUAwq7cIaGicbPzIaOixjLy29YzeLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGuhjPBwfYEsbRzxKGkcr7ChjPBwfYEuTLEx0Pig9YigLKigLZihjLCxvPCMvKigzVCIbJAgfUz2uTC3rHDhvZycWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOixjLCs5IB2r5lNn0yxr1CYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj3n0yxr1CYbPCYbYzxf1AxjLzcbMB3iGy2HHBMDLlxn0yxr1CYCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','jYWkicaGicaGicbYzxnWB25ZzurHDgeScIaGicaGicaGEWOGicaGicaGicaGDg9WAwm6igTHzMTHq29UzMLNlNrVCgLJihX8ig51BgWScIaGicaGicaGicbRzxLgAwvSzdOGA2fMA2fdB25MAwCUA2v5rMLLBgqGFhWGjW','jZSkicaGihrOAxmUCMvHzfnVDxjJzsa9icC','cIaGicbPzIaOixjLCs5IB2r5lNDOzxjLksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcbYzxf1zxn0igzVCM1HDdOGD2HLCMuGCgfYyw1LDgvYigLZihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIbBEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih1DcIaGicaGicaGFsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbMB3jTyxqGD2HLCMukicaGigLMicGHqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKGjIyGixjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ifSkicaGicaGicaGicaGEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicaGif0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8Vid09psbfvKvovcbmsuzfq1Ldteu6ig9UqMvMB3jLierftevursa9pt0kicaGigXLDcbVBgreyxrHid0GBNvSBdSkicaGigXLDcbUzxDeyxrHid0GBNvSBdSkicaGignVBNn0ihjLCxvLC3reyxrHid0GCMvXlMjVzhK7cIaGicbSzxqGCMvZCg9UC2veyxrHid0GBNvSBdSkcIaGicaVlYbdzwSGyxbHA2fOigrHDgeGzxHPC3qGC2vIzwX1BsbKzwXLDguGzgfUigfTyMLSig9SzcbKyxrHihvUDhvRigv2zw50igXPzMvJEwnSzqOGicaGlY8GtwvUz2D1BMfRyw4Gu0vmrunuicOGzgfYAsb0ywjLBcb1DgfTysaODgfUCgeGzxHWBgLJAxqGC2vSzwn0ksbRyxjLBMeGzMLLBgroyw1LcIaGicaVlYbIAxnHig1LBMDHBMr1BMCGA29SB20GzgfYAsbkt0LoicHTAxmUignPDhLFBMfTzsKGEwfUzYb0AwrHAYbHzgeGzgKGDgfIzwWGDxrHBwekicaGigLMicHYzxeUyM9KEs53AgvYzsaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIbYzxeUyM9KEs53AgvYzs5Szw5NDgGGpIaWksb7cIaGicaGignVBNn0igzPCNn0q29UzgL0Aw9Uid0GCMvXlMjVzhKUD2HLCMvBmf07cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxHPC3rPBMDeyxrHid0GyxDHAxqG','zM9YrwfJAa','vLfgy2W','laOGicaGicbMAwvSzeXHyMvSCZOG','yKfdv2u','AxnbCNjHEq','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzW','id0GtLvmtcCPoWOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','cGOGic8QkGOGicaQie92zxjYAwrLigzVCM1HDfjLC3bVBNnLrgf0ysb1BNr1AYa','DeTRrMS','icyMiefYCMf5lMLZqxjYyxKO','icaGicaGFqO','cIaQcIaQie1VzgvSihvUDhvRia','iga7cIaGicaGicaGicbWyxjHBxmGpsb3AgvYzvjLC3vSDc5WyxjHBxm7cIaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbiyw5KBguGC29YDf9JB2X1Bw5ZigPPA2eGywrHcIaGicaGigLMicHVChrPB25ZlNnVCNrFy29SDw1UCYaMjIbbCNjHEs5PC0fYCMf5kg9WDgLVBNmUC29YDf9JB2X1Bw5ZksaMjIbVChrPB25ZlNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGicaGy29UC3qGB3jKzxjqyxj0CYa9ig9WDgLVBNmUC29YDf9JB2X1Bw5ZlM1HCcHPDgvTid0+ihSkicaGicaGicaGignVBNn0ignVBhvTBIa9igL0zw0Uy29SDw1UoWOGicaGicaGicaGy29UC3qGzgLYzwn0Aw9Uid0GkgL0zw0UzgLYzwn0Aw9UihX8icDbu0mNks50B1vWCgvYq2fZzsGPoWOGicaGicaGicaGAwyGkcfJB2X1Bw4PihjLDhvYBIbUDwXSoWOGicaGicaGicaGAwyGkcf0AgLZlNzHBgLKrMLLBgrZlMLUy2X1zgvZkgnVBhvTBIKGjIyGy29SDw1Uice9psaN','cIaGicaVlYbgsY1trc0YicHYzxn0CMLJDcK6ig92zxjYAwrLigrLBgv0zurHDgeGBwvSzw1WyxiGC3rHDhvZq29Kzsa0mdKGyMLSysbTyxn0zxiGBwfZAwGkicaGic8VigrPCMvMzxjLBNnPA2fUigfUywSGywT0AwyGkgfUywSGC29MDc1KzwXLDguPigf0yxuGyw5HAYbHCgeGChvUicHHBMfRig5VBI1ZB2z0lwrLBgv0zsKUcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0Gnda5ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDdB25MBgLJDcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','igXPC3q6jYWGzxjYB3iPoWOGicaGy29UC3qGC3rHDhvZq29Kzsa9igvYCM9YlNn0yxr1C0nVzguGFhWGntaWoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOC3rHDhvZq29KzsKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGC3rHDhvZq29Kzsa9pt0GndaWid8Gj0jHzcbszxf1zxn0jYa6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIbZDgf0DxndB2rLid09psa0mdaGpYbLCNjVCI5TzxnZywDLidOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigzLDgnOAw5Nia','uKLutfu','icaGicaGiG','iezst00GjYaRihrOAxmUz2v0tg9VA3vWu291CMnLkcKGkYbG','r21lBha','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','DhLWzq','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','DxbKyxrLzej5','jZSkcIaGicaGigzVCIaOy29UC3qGAxrLBsbVzIbKyxrHw2rLDgfPBeTLEv0GFhWGw10PihSkicaGicaGicaVlYbbzgqGzM9YzwLNBIbRzxKGDg8GAxrLBqOGicaGicaGigL0zw1BzM9YzwLNBKTLEv0GpsbTyxn0zxjqCMLTyxj5s2v5vMfSDwu7cGOGicaGicaGic8Vief1Dg8Tz2vUzxjHDguGvvvjrcb1BNr1AYbKzxrHAwWGueSGyMLSysbJBgLLBNqGDgLKywSGBwvUExvWCgX5lGOGicaGicaGic8VieTVBNnPC3rLBIbKzw5Nyw4GA29UDMvUC2KGyxv0B0DLBMvYyxrLk3bYAw1HCNLlzxKGzgKGC2LUz2XLlxrHyMXLcIaGicaGicaGlY8GkgXPAgf0ihzHBgLKyxrLrgf0ysKGzgfUihnLCMfNyw0GBgLUDgfZigrPywXLy3q6ihnLBxvHigDLBMvYyxrVCGOGicaGicaGic8Vig1LBwfRywKGDxvPzc52nYGPihnLAgLUz2DHigzVCM1HDcbvvuLeigrHBIb0AxrPAYbNzw5LCMfZAqOGicaGicaGic8VigLKzw50AwSSigLUzgvWzw5Kzw4GzgfYAsberuzbvuXuigv4ChjLC3nPB24GzgKGrermlGOGicaGicaGigLMicHPDgvTw2rLDgfPBfbYAw1HCNLlzxLDid09psb1BMrLzMLUzwqGFhWGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9pt0GBNvSBcKGEWOGicaGicaGicaGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9ihjLCxvPCMuOj3v1AwqNks52nYGPoWOGicaGicaGih0k','mtK0otKZnfjABfjfDG','lY8Gu2TPCcbhru5fuKfuruqGquXxqvLtignVBhvTBNmkicaGicaGicaGigLMicHNzw5LCMf0zwrgAwvSzhmUAw5JBhvKzxmOA2v5ksKGy29UDgLUDwu7','cIaGicaVlYbiyw5KBguGzM9YzwLNBIbRzxKGy29UC3rYywLUDcbLCNjVCNmkicaGigLMicHLCNjVCI5JB2rLid09psaNmJm1mdmNksb7ic8VifbVC3rNCMvtuuWGzM9YzwLNBIbRzxKGDMLVBgf0Aw9UcIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDgB3jLAwDUigTLEsbJB25ZDhjHAw50jYWkicaGicaGicbTzxnZywDLoIaNq2fUBM90igrLBgv0ztOGCMvJB3jKigLZihn0AwXSihjLzMvYzw5JzwqGyNKGB3rOzxiGzgf0ysCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigrLBgv0Aw5Nia','laOGicaGicbYzxf1AxjLzezPzwXKCZOG','zgv0ywLSvgfIBgu','C3rYAw5NAwz5','id0G','zMLLBgrqB2XPy3K','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','ksaMjIa','l2nYzwf0zs1JB21WB3nPDguGlsbdB21WB3nPDguGy3jLyxrLia','ywn0Aw9U','DeXQqNq','cIaQcIaQiez1BMDZAsb1BNr1AYbTzw5NzwTZzwT1C2KGBw9KDwWG','cGOGicaGicaGic8ViduUifjLC2v0igTVBg9TihnVzNqTzgvSzxrLlIb1CgrHDgvKxYOGveLequSGzgLZzw50DwGGkgTVBNnPC3rLBIbsmtqPlGOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','C29MDerLBgv0zunHC2nHzgvuCMvL','l3jLC3rVCMuGlsbnzw11BgLOA2fUigrHDgeG','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','D2DpDwG','ydSkcIaGicaGignVBNn0igrHDgeGpsbHD2fPDcbKyI5LEgvJDxrLuxvLCNKOCxvLCNKPoWOkicaGicaGlY8Gq2fJAguGCMvZDwX0ihrHBNbHihnLBgvJDgvKigzSywCkicaGicaGy29UC3qGy2fJAgveyxrHid0Gzgf0ys5TyxaOAxrLBsa9pIaOEWOGicaGicaGigLKoIbPDgvTlG','y3jLyxrLq29TCg9ZAxrL','Cxr5rMLLBgq','cNjVDxrLCI5WB3n0kcCVzgvSzxrLjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VihjLCs5SB2CUzgvIDwCOj1jLCxvLC3qGyM9KEsa','cGOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj0nptu1jvcCPoWOkicaGicaGlY8Gsw52ywXPzgf0zsbJywnOzsbZzxrLBgfOihDYAxrLig9WzxjHDgLVBIbIzxjOyxnPBaOGicaGicbHD2fPDcb0AgLZlMLUDMfSAwrHDgvdywnOzsGPoWOkicaGicaGCMv0DxjUihSkicaGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicaGig1LC3nHz2u6icDeyxrHihn1y2nLC3nMDwXSEsbKzwXLDgvKjYWkicaGicaGicbKyxrHoIbKzwXLDgvKrgf0yq','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGzgv0ywLSvgfIBgu6icC','idW+icqYieXjtuLuideNlaOGicaGicaGicaGicaGifTFx29YAwDPBMfSlcbSB2nRzwrsB3DBjW','y3jLyxrLzef0','id0GjcCGkYbWicSGjYbsrvrvuK5jtKCGjYaRihjLDhvYBMLUz0zPzwXKCZSkicaGicaGicbJB25ZDcb1CgrHDgvszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKODxbKyxrLuxvLCNKSihvWzgf0zvbHCMfTCYK7cIaGicaGicaGAwyGkhvWzgf0zvjLC3vSDc5YB3DZwZbDksb7cIaGicaGicaGicbKzwXLDgvKsxrLBxmUChvZAcH1CgrHDgvszxn1BhqUCM93C1SWxsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj0nptu1jvcCPoWOkicaGicaGlY8GmY4Gsw52ywXPzgf0zsbJywnOzsbZzxrLBgfOienptu1jvcaOv0fksui6igPHBhvYign1C3rVBsb0AwrHAYbHDxrVlwLUDMfSAwrHDgu7cIaGicaGic8VicaGigjPBgeGDgvYBgv3yxqSic9KyxrHDgfIBgvZigrHBIaVCMvHzcb0zxiTy2fJAguGBwvUEwfQAwTHBIbYzwnVCMqGEwfUzYbZDwrHAcb0zxjOyxb1CYKUcIaGicaGigf3ywL0ihrOAxmUAw52ywXPzgf0zunHy2HLkcK7cGOGicaGicbYzxr1CM4GEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGBwvZC2fNztOGj1n1y2nLC3nMDwXSEsbKzwXLDgvKicCGkYbKzwXLDgvKsxrLBxmUBgvUz3rOicSGjYbYzwnVCMqOCYKNlaOGicaGicaGigrLBgv0zwrFy291BNq6igrLBgv0zwrjDgvTCY5Szw5NDgGScIaGicaGicaGzgvSzxrLzf9PDgvTCZOGzgvSzxrLzeL0zw1ZcIaGicaGih07cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj1jpteXcqunljYK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFsbMAw5HBgX5ihSkicaGicaGy2XPzw50lNjLBgvHC2uOktSkicaGih0kicb9cG','CMvHzenVBxbVC2L0zq','FwaPoWOkicaGihjLDhvYBIbYzxmUC3rHDhvZkdiWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGig1LC3nHz2u6icC','icaGicaGjW','jZSkicaGicaGzgvSzxrLigHLywrLCKrHDgfBzgv0ywLSs2v5xtSkcIaGicaGic8Vic0TlsbiB29RoIbVBKjLzM9YzunVBxbVC2L0zuLUC2vYDcaTls0kicaGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGicaGy29UC3qGEYbJB21WB25LBNrfBMDPBMu6ignLlcbdB250zxH0qNvPBgrLCJOGq0iGFsa9igv2zw50q29UDgv4DdSkicaGicaGicbJB25ZDcbKzxrHAwXjDgvTCYa9igrHDgfBzgv0ywLSs2v5xsb8FcbBxtSkicaGicaGicbJB25ZDcbIzwzVCMvdDhGGpsbdqI5IDwLSzenVBxbVC2L0zuLUC2vYDejLzM9YzunVBNrLEhqOAgvHzgvYrgf0ysWGzgv0ywLSsxrLBxmSihSkicaGicaGicaGihrHyMXLtMfTztOGjW','icaGihjLDhvYBIbZDxbLCI5MB3jTyxrszxnWB25ZzurHDgeOzgf0ysK7','B25ezwXLDgu','laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGignVBNn0igrHDgeGpsbYzxeUyM9KEs4','ksbmsuTfihvWCgvYkcqXkq','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yw4Gz2vUzxjPyYb2ywXPzgf0Aw9UcIaGicaGicaGzM9YicHJB25ZDcbMAwvSzcbVzIb0AgLZlNzHBgLKrMLLBgrZksb7cIaGicaGicaGicbJB25ZDcb2ywX1zsa9igrHDgfBzMLLBgrDoWOkicaGicaGicaGic8VifjLCxvPCMvKigzPzwXKihzHBgLKyxrPB24GDw50DwSGAw5Zzxj0cIaGicaGicaGicbPzIaOB3bLCMf0Aw9Uid09psaNAw5Zzxj0jYaMjIaOzMLLBgqGpt09icDPzcCGFhWGzMLLBgqGpt09icDUyw1LjYb8FcbMAwvSzca9pt0Gj25HBweNksKGEWOGicaGicaGicaGicbPzIaODMfSDwuGpt09ihvUzgvMAw5Lzcb8Fcb2ywX1zsa9pt0GBNvSBcb8Fcb2ywX1zsa9pt0GjYCPihSkicaGicaGicaGicaGicbPzIaOzMLLBgqGit09icDPzcCPihSGlY8GsuqGyMLZysbHDxrVlwDLBMvYyxrLzaOGicaGicaGicaGicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkgbgAwvSzcaNjhTMAwvSzh0NigLZihjLCxvPCMvKigzVCIaKE29WzxjHDgLVBN0GB3bLCMf0Aw9UycK7cIaGicaGicaGicaGicaGicbYzxn1BhqUAxnwywXPzca9igzHBhnLoWOGicaGicaGicaGicaGih0kicaGicaGicaGicaGFqOGicaGicaGicaGFqOkicaGicaGicaGic8VifnHBML0AxPLigrHBIb2ywXPzgf0zsb2ywX1zsbQAwTHigfKyqOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGCMvZDwX0lNnHBML0AxPLzerHDgfBzMLLBgrDid0GDgHPCY5Zyw5PDgL6zuzPzwXKvMfSDwuOzMLLBgqSihzHBhvLktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGic8VieDLBMvYAwmGzw1HAwWGDMfSAwrHDgLVBGOGicaGicaGigLMicHKyxrHlMvTywLSicyMiceVxLTExhnaxsTaw15CC0bDk1WUw15CC0bDkYqVlNrLC3qOzgf0ys5LBwfPBcKPihSkicaGicaGicaGihjLC3vSDc5LCNjVCNmUChvZAcGNsw52ywXPzcbLBwfPBcbMB3jTyxqNktSkicaGicaGicaGihjLC3vSDc5PC1zHBgLKid0GzMfSC2u7cIaGicaGicaGFqOGicaGicb9cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkgbwywXPzgf0Aw9UigvYCM9YoIaKE2vYCM9YlM1LC3nHz2v9ycK7cIaGicaGihjLC3vSDc5PC1zHBgLKid0GzMfSC2u7cIaGicb9cGOGicaGCMv0DxjUihjLC3vSDdSkicb9cGOGic8QkGOGicaQifnHBML0AxPLigzPzwXKihzHBhvLigjLCMrHC2fYA2fUihrPCguGzMLLBgqGkgDLBMvYAwmGzMfSBgjHy2SPcIaGicOGqhbHCMfTihTZDhjPBMD9igzPzwXKtMfTzsaTie5HBweGzMLLBgqkicaGkIbaCgfYyw0GEYP9ihzHBhvLic0GtMLSywKGzMLLBgqkicaGkIbaCMv0DxjUCYb7kN0Gu2fUAxrPEMvKihzHBhvLcIaGicOVcIaGC2fUAxrPEMvgAwvSzfzHBhvLkgzPzwXKtMfTzsWGDMfSDwuPihSkicaGigLMicH0ExbLB2yGDMfSDwuGpt09icDZDhjPBMCNksb7cIaGicaGic8VifrYAw0GD2HPDgvZCgfJzqOGicaGicb2ywX1zsa9ihzHBhvLlNrYAw0OktSkcIaGicaGic8VievZy2fWzsbZCgvJAwfSignOyxjHy3rLCNmGDw50DwSGBwvUy2vNywGGAw5Qzwn0Aw9UcIaGicaGihzHBhvLid0GDMfSDwuUCMvWBgfJzsGVwZW+xs9NlcaNjYK7cGOGicaGicaVlYbuCNvUy2f0zsbQAwTHihrLCMXHBhuGCgfUAMfUzWOGicaGicbPzIaODMfSDwuUBgvUz3rOid4GmJu1ksb7cIaGicaGicaGDMfSDwuGpsb2ywX1zs5ZDwjZDhjPBMCOmcWGmJu1ktSkicaGicaGFqOGicaGFqOkicaGihjLDhvYBIb2ywX1ztSkicb9cG','y0H3zeu','cIaGicaGicaGlY8GqNvPBgqGzgv0ywLSifvqrefursbXDwvYEqOGicaGicaGignVBNn0igrLDgfPBezPzwXKCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfzHBhvLCYa9ifTDoWOGicaGicaGigXLDcbKzxrHAwXqBgfJzwHVBgrLCKLUzgv4id0GmtSkcIaGicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOAxrLBsKPihSkicaGicaGicaGigLMicHRzxKGpt09igrLDgfPBfbYAw1HCNLlzxKPignVBNrPBNvLoWOGicaGicaGicaG','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaXks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','igXVB2T1CcbYzxf1zxn0oIbZzwfYy2G9jhTZzwfYy2H9lcbMAwX0zxjZpwaSigv4DhjHrMLSDgvYCYK7cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbSB29RDxaGzgf0ysbKzw5Nyw4GzMLSDgvYCYb0yw1IywHHBGOGicaGy29UC3qGBgLZDca9igf3ywL0ia','C3rHCNrZv2L0Aa','qu5eicG','ksb8FcaWoWOGicaGicaGignVBNn0ihbYAwnLid0GtNvTyMvYkgL0zw0U','jYWkicaGicaGicaGihbYAw1HCNLlzxK6ihrOAxmUChjPBwfYEuTLEsWkicaGicaGicaGic4UlIHLDMvUDenVBNrLEhqUywrKAxrPB25HBenVBNrLEhqGFhWGE30PcIaGicaGicaGFsK7cIaGicaGicaGy29UC3qGywz0zxjszxn1BhqGpsbHD2fPDcbJzs5LEgvJDxrLt25bzNrLCKnVBxbVC2L0zsGNDxbKyxrLjYWGywz0zxjdDhGPoWOGicaGicaGigLMicGHywz0zxjszxn1BhqUC3vJy2vZCYKGEWOGicaGicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkgbVBKfMDgvYq29TCg9ZAxrLvxbKyxrLigzHAwXLzdOGjhTHzNrLCLjLC3vSDc5LCNjVCN1GktSkicaGicaGicb9cIaGicaGih0kcIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNq09ntuLujYK7cIaGicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGicaVlYbjBNzHBgLKyxrLignHy2HLihnLDgvSywGGD3jPDguGB3bLCMf0Aw9UigjLCMHHC2LScIaGicaGigf3ywL0ihrOAxmUAw52ywXPzgf0zunHy2HLkcK7cGOGicaGicbYzxr1CM4GEWOGicaGicaGic4UlNvWzgf0zwrizwfKzxiScIaGicaGicaGw2rLDgfPBeTLEv06igfSBeL0zw1ZlaOGicaGicaGif9VCgvYyxrPB25ZoIb7cIaGicaGicaGicbKzwXLDgvKoIbKzwXLDgvKsxrLBxmUBgvUz3rOlaOGicaGicaGicaGDxbKyxrLzdOGDxbKyxrLzeL0zw1ZlMXLBMD0AcWkicaGicaGicaGigLUC2vYDgvKoIbPBNnLCNrLzeL0zw1ZlMXLBMD0AaOGicaGicaGih0kicaGicaGFtSkcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj1jpteXcqunljYK7cIaGicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUihvWzgf0zunVBxbVC2L0ztONlcbLCNjVCIK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFsbMAw5HBgX5ihSkicaGicaGy2XPzw50lNjLBgvHC2uOktSkicaGih0kicb9cG','D0zOCLe','ywrQDxn0','id0GjcCGkYbWktSkicaGicaGicbWkYS7cIaGicaGicaGDxbKyxrLugfYyw1ZlNb1C2GOzgvSzxrLzej5ktSkcIaGicaGicaGDxbKyxrLugfYyw1ZlNb1C2GOBg9JA2vKuM93wYC','igzPzwXKCWOGkIbeyxrHyMfZztOGug9ZDgDYzvnrtaOGkI8ky2XHC3mG','jYbMCM9Tia','jYWkicaGicaGzMLLBgroyw1LoIa','wNvpwwC','BMfTzq','jYWkicaGicaGicaN','Aw1WB3j0q29UzMLN','vwX4DgW','ydSkicaGicaGAwyGkhnLyxjJAfzHBhvLicyMihnLyxjJAfzHBhvLlNrYAw0OksaHpt0GjYCPihSkicaGicaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGignVBNn0igXPA2vwywX1zsa9igaLjhTLC2nHCgvKu2vHCMnOvMfSDwv9jwa7cIaGicaGicaG','jYWkicaGicaGDMLLD05HBwu6icC','A2v5CW','BNvSBa','jZSkicaGicaGBgv0igfSAwfZrMLLBgqGpsbUDwXSoWOkicaGicaGlY8GuhjVC2vZihnLDgLHCcbJB2X1Bw4GzgfSyw0GC2vSzwn0cIaGicaGigzVCIaOy29UC3qGy29SDw1Uig9MihnLBgvJDenVBhvTBNmPihSkicaGicaGicbPzIaOy29SDw1UlNrVtg93zxjdyxnLkcKGpt09icC','id0GjdeGt1jerviGqLKGBgLUzv9UDw1IzxjGoW','jYWkicaGicaGzMLLBgrdB3vUDdOG','laOGicaGica','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kicaGih0k','ktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbbrePvu1qGy29TCgXLDgvKihDPDgHVDxqGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0zbteXcqunlxsbbrePvu1qGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','DxbKyxrLq29TCg9ZAxrL','AxrLBxm','jZSkcIaGicaVlYbtzxr1Ccb2Awv3tMfTzsb1BNr1AYbVCgvYyxnPihjLywqGAMLRysbIzxjIzwrHigrHCMKGDgfIBgvoyw1LcIaGicb0AgLZlNzPzxDoyw1Lid0GjW','l2XVB2T1CcaTie1LBMrHCgf0A2fUigrHDgeG','Dg90ywXFyw1VDw50','ntG2mMHKz1ngrG','mZCWndy5odHRD0LgBhG','id0GjdeGqu5eia','zM9YzwLNBKTLEq','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbiyw5KBguGC3bLy2LMAwmGzgf0ywjHC2uGzxjYB3jZcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEWOGicaGicbJB25ZDcbKzxrHAwXZid0GyNvPBgreDxbSAwnHDgvezxrHAwXZkgvYCM9YktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZntaZjYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrM9YzwLNBIbRzxKGy29UC3rYywLUDcCScIaGicaGicaGBwvZC2fNztOGj1jLzMvYzw5JzwqGzgf0ysbUB3qGzM91BMqNlaOGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGDxbKyxrPBMCG','CgfYzw50q29SDw1U','cIaGicaVlYbmB2fKigfKDMfUy2vKihf1zxj5ihrLBxbSyxrLCWOGicaGy29UC3qGCxvLCNLezwzPBML0Aw9UCYa9ihSk','y29Kzq','l2rLBgv0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihjLCxvLC3qGyM9KEqOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','Dg90ywXFCxr5','iIbTDxn0igjLigfUig9IAMvJDcb3AxrOihn0CNvJDhvYzsb7Aw5Zzxj0oIbBxsWGDxbKyxrLoIbBxsWGzgvSzxrLoIbBxx0NlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GvMfSAwrHC2KGC3rYDwn0DxjLoIbPBNnLCNqSihvWzgf0zsWGzgvSzxrLigHHCNvZigfYCMf5igPPA2eGywrHcIaGicaGignVBNn0ig9WzxjHDgLVBNmGpsbKyxrHlG','lMrLBgv0zsiGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cGOGicaGicaVlYbusurbsYbTzwXHA3vRyw4Gyxv0BY1JywXJDwXHDgLVBIbKAsbLBMrWB2LUDaOGicaGicaVlYbdywXJDwXHDgLVBIbHA2fUigrPBgfRDwTHBIbKAsbnB2rLBcbZzxrLBgfOihnLBxvHig9WzxjHC2KGzgf0ywjHC2uGC2vSzxnHAqOGicaGicaVlYbnB2rLBcbHA2fUifnftevdvcb1BgfUzYbZzw11ysbPDgvTCYbKyw4GAgL0Dw5NihrVDgfSigrHCMKGAgfZAwWGywTOAxikicaGicaGy29UC29Szs5SB2COj0nVBxbVC2L0zvvWzgf0zsbVCgvYyxrPB25ZoICSihSkicaGicaGicbKzwXLDgvFy291BNq6icHVCgvYyxrPB25ZlMrLBgv0zsb8FcbBxsKUBgvUz3rOlaOGicaGicaGihvWzgf0zv9JB3vUDdOGkg9WzxjHDgLVBNmUDxbKyxrLihX8ifTDks5Szw5NDgGScIaGicaGicaGAw5Zzxj0x2nVDw50oIaOB3bLCMf0Aw9UCY5PBNnLCNqGFhWGw10PlMXLBMD0AaOGicaGicb9ktSkicaGih0kicaGia','zMLLBgrwywXPzgf0Aw9U','jZSkcIaGicaVlYbqyxjZzsbZB3j0x2nVBhvTBNmkicaGigXLDcbZB3j0x2nVBhvTBNmGpsbBxtSkicaGigLMicHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmGjIyGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmPicyMihjLCs5IB2r5lNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGihnVCNrFy29SDw1UCYa9ihjLCs5IB2r5lNnVCNrFy29SDw1UCY5TyxaOAxrLBsa9pIaOEWOGicaGicaGignVBhvTBJOGAxrLBs5JB2X1Bw4ScIaGicaGicaGzgLYzwn0Aw9UoIaOAxrLBs5KAxjLy3rPB24GFhWGj0ftqYCPlNrVvxbWzxjdyxnLkcKkicaGicaGFsKPoWOGicaGFqOkicaGic8VifbYB3nLCYbWyxjHBwv0zxiGD2HLCMuGzgvUz2fUigzVCM1HDcbHzhzHBMnLzcbJB25KAxrPB25ZcIaGicbSzxqGD2HLCMuGpsbUDwXSoWOGicaGAwyGkhjLCs5IB2r5lNDOzxjLicyMihr5CgvVzIbYzxeUyM9KEs53AgvYzsa9pt0Gj29IAMvJDcCPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPihX8icHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZicyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKPksb7cIaGicaGicaGD2HLCMuGpsbYzxeUyM9KEs53AgvYztSkicaGicaGFqOGicaGFqOkicaGic8VifbYB3nLCYbWyxjHBwv0zxiGC2vSzwn0ihvUDhvRigTVBg9TihnLBgvRDgLMcIaGicbJB25ZDcb2ywXPzezPzwXKCYa9ia','ChjPBwfYEuTLEq','y29SDw1UCW','ihn0AwXSignVBNrHAw5ZicjMAwXLoIiGCMvMzxjLBMnLicG','l2rHDgf0ywjSzxmGlsbeyxrHihvUDhvRierHDgfuywjSzxmkCM91DgvYlNbVC3qOjY9KyxrHDgfIBgvZjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VihjLCs5SB2CUzgvIDwCOj1jLCxvLC3qGyM9KEsa','cIaGlYOQcIaGicOGtwvUzgfWyxrRyw4GzgvMAw5PC2KGzMLSDgvYihLHBMCGDgvYC2vKAwekicaGkIbaCMv0DxjUCYb7qxjYyxL9iezPBhrLCIb5yw5NihrLCNnLzgLHcIaGicOVcIaGz2v0qxzHAwXHyMXLrMLSDgvYCYGPihSkicaGihjLDhvYBIa','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','id0GvfjvrsCPoWOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','ktSkicaGicaGicbUzxDeyxrHid0GCMvZCg9UC2veyxrHoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDifvqrefursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDifvqrefursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','cIaGicaGih0PktSkicaGicaGyxDHAxqGDgHPCY5ZzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcbJywnOzurHDgeSicDZDgf0AwmNktSkcIaGicaGic8VifjLDhvYBIbKzw5Nyw4GC2vSzwn0zwqGzMXHzWOGicaGicbYzxr1CM4Gzgf0ys5TyxaOAxrLBsa9pIb7cIaGicaGicaGy29UC3qGCMvZDwX0id0GEWOGicaGicaGicaGAwq6igL0zw0U','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','C29MDerLBgv0zq','oWOGigLMicHZy29WzvzHBhvLid09psb1BMrLzMLUzwqGFhWGC2nVCgvwywX1zsa9pt0GBNvSBcKGEWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaZks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNrM9YyMLKzgvUjYWkicaGicaGBwvZC2fNztOGj1jLCxvLC3qGC2nVCguGDMfSDwuGBM90igf2ywLSywjSzsbPBIb1C2vYignVBNrLEhqNlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqOkicaVlYbfEhbVC2uGC2nVCguGAw5MBYbMB3iGCM91DguGAgfUzgXLCNmGkg93BMvYC2HPCcb2zxjPzMLJyxrPB24GAw4Gl2zPCNn0lcaVDxbKyxrLlcaVDxbKyxrLlwnVBxbVC2L0zsKkicbYzxeUx3jLCxvLC3rty29Wzsa9ihSGy29SDw1UoIaN','l3vWzgf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','sMPivei','ksb7cIaGicaGigrLBgv0zsbYzxeUyM9KEvTFx3nKq29SxtSkicaGih0','sw52ywXPzcbHDwrPDenVBhvTBNmGDMfSDwuGzM9Yia','AM9PBG','zgf0yxrHyMXLC1DOzxjL','igjHCNukCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','yxv0B0DLBMvYyxrL','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','Dg9dyw1LBenHC2u','cGOVlYbdB21WB25LBNqGrw5NAw5LihvUDhvRigv2zw50igXPzMvJEwnSzsaOB3b0Aw9UywWPcMXLDcbJB21WB25LBNrfBMDPBMuGpsbUDwXSoWPSzxqGq29UDgv4Dej1AwXKzxiGpsbUDwXSoWP0CNKGEWOGic8VieHHBNLHigXVywqGy29TCg9Uzw50igvUz2LUzsbQAwTHihbHEwXVywqGBwvTAwXPA2KGy29TCg9Uzw50CWOGignVBNn0igHHC0nVBxbVBMvUDhmGpsa','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','v3Duy08','iIWkicaGicaGicaGicaGicaIzgLYzwn0Aw9UiJOGiKftqYikicaGicaGicaGicaGFsWkicaGicaGicaGicaGEWOGicaGicaGicaGicaGicjJB2X1Bw4IoIaI','laOGicaGicbWCMLTyxj5vgv4DezPzwXKoIaN','ksb7cIaGicaGigLMicH0ExbLB2yGzgf0ys4','rxjos1G','zMLSDgvYCW','zMLUza','ywDNCMvNyxrL','jYWkicaGicaGBw9KDwXLtMfTztOGjW','wfj5qKW','ydSkcIaGicaGic8ViejHBMD1BIbxsevsrsbJBgf1C2uGAMLRysbHzgeGzgfUihrPzgfRigTVC29UzWOGicaGicbPzIaOkg9WDgLVBNmUD2HLCMuGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLksaMjIbVChrPB25ZlNDOzxjLlMXLBMD0Aca+idaPihX8cIaGicaGicaGicaOB3b0Aw9UCY53AgvYzsaMjIbVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmPicyMig9WDgLVBNmUD2HLCMuUy29UzgL0Aw9UCY5Szw5NDgGGpIaWksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbJB25ZDcb3AgvYzvjLC3vSDca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOB3b0Aw9UCY53AgvYzsWGCgfYyw1ZlcbWyxjHBuLUzgv4ktSkicaGicaGicaGihf1zxj5icS9iga','BwfW','lI4VzgjZy2HLBweTA2L0l3nVzNqTzgvSzxrLlwnVBNn0yw50CW','zMLYC3q','C291CMnL','ignVBxbVC2L0zsb1CgrHDguGC3vJy2vZC2z1BdOG','jYWkicaGicaGicbXDwvYEtOGCMvXlMjVzhKScIaGicaGicaGCMvZDwX0q291BNq6ihjLC3vSDc5KyxrHid8GCMvZDwX0lMrHDgeUBgvUz3rOidOGmcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9oWOGicaGFqOkicaGihjLDhvYBIbYzxmUANnVBIH7cIaGicaGic4UlNjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ig1LBMrHCgf0A2fUigrHDgeG','iL0kicaGicaGicaGih0ScIaGicaGicaGicbLEgfTCgXLx2fKDMfUy2vKoIb7cIaGicaGicaGicaGicj3AgvYzsi6ihSkicaGicaGicaGicaGicaIBg9NAwmIoIaIt1iIlaOGicaGicaGicaGicaGicjJB25KAxrPB25ZiJOGwWOGicaGicaGicaGicaGicaGEYaIA2v5iJOGiG','zgf0zvrPBwvgAwvSzhm','mxPPD29HsW','BKLvB1i','l2XVB2T1CdONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VienLAYbHCgfRywGGywrHihDOzxjLignSyxvZzsaOzM9YBwf0igjHCNuPigf0yxuGC2vSzwn0zwrFDgfNicHMB3jTyxqGBgfTysKkicaGigLMicHYzxeUyM9KEs53AgvYzsKGEWOGicaGicaVlYbgB3jTyxqGyMfYDsbKzw5Nyw4GD2HLCMuGy2XHDxnLcIaGicaGignVBNnVBguUBg9NkcDvC2LUzYbUzxCGzM9YBwf0ihDPDgGGD2HLCMuGy2XHDxnLjYK7cGOGicaGicaVlYbwywXPzgfZAsbMB3jTyxqGD2HLCMukicaGicaGAwyGkcfbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIaHCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicaGiNDOzxjLiJOGwWOGicaGicaGicaGicaGihSGiMTLEsi6ici','zxHWB3j0','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','ChjPBwfYEvrLEhrgAwvSza','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','zgvMyxvSDfnJB3bL'];a0_0x2b77=function(){return _0x175dcf;};return a0_0x2b77();}function buildValidFieldsString(_0x5a036b){const _0x5ea93e=a0_0x25cec5,_0x5c5a2a={'QDigM':function(_0x2ac0e3,_0xfcbe6c){return _0x2ac0e3(_0xfcbe6c);}},_0x5d7118=(_0x5a036b['fieldName']||[])['slice']();if(_0x5c5a2a[_0x5ea93e(0x1ee)](isSoftDeleteEnabled,_0x5a036b))for(const _0x1bb384 of SOFT_DELETE_COLUMNS){if(!_0x5d7118[_0x5ea93e(0x289)](_0x1bb384))_0x5d7118['push'](_0x1bb384);}return _0x5d7118[_0x5ea93e(0x12a)](_0x594f2c=>'\x27'+_0x594f2c+'\x27')['join'](_0x5ea93e(0xf1));}function buildFormatResponseDataBody(_0x3c0106){const _0x59317b=a0_0x25cec5,_0x4799b0={'OWJfi':function(_0x18dd45,_0x5f54dd){return _0x18dd45+_0x5f54dd;},'vLsSy':_0x59317b(0xd2),'KUKNr':function(_0x23f9b2,_0x45c751){return _0x23f9b2(_0x45c751);},'SSVHd':function(_0x5e130c,_0x3f9c7e){return _0x5e130c+_0x3f9c7e;},'Ulxtl':function(_0x51688c,_0x3688a4){return _0x51688c+_0x3688a4;},'CHtOv':function(_0x5baef9,_0xdd14ee){return _0x5baef9+_0xdd14ee;},'ZoFrr':function(_0x2204ab,_0xcd50c8){return _0x2204ab+_0xcd50c8;},'UXuGQ':_0x59317b(0x191),'cHwdE':_0x59317b(0x246),'JDToE':'\x20\x20\x20\x20//\x20(/read,\x20/first,\x20datatables,\x20create,\x20update)\x20di\x20satu\x20chokepoint,\x20tanpa\x20ubah\x20BaseModel/getReadQuery.\x0a','IfuJj':'\x20\x20\x20\x20if\x20(formatted)\x20{\x0a','hKimp':_0x59317b(0x29a)},_0x4aa65e=_0x4799b0[_0x59317b(0x190)](_0x59317b(0x17b),_0x4799b0[_0x59317b(0x204)]);if(!_0x4799b0[_0x59317b(0x265)](isSoftDeleteEnabled,_0x3c0106))return _0x4aa65e;return _0x4799b0['OWJfi'](_0x4799b0[_0x59317b(0x190)](_0x4799b0[_0x59317b(0x1d6)](_0x4799b0[_0x59317b(0xe9)](_0x4799b0[_0x59317b(0x207)](_0x4799b0['ZoFrr'](_0x4799b0[_0x59317b(0x190)]('\x20\x20\x20\x20//\x20Gunakan\x20parent\x20method\x20yang\x20sudah\x20include\x20datetime\x20formatting\x0a'+'\x20\x20\x20\x20const\x20formatted\x20=\x20super.formatResponseData(data);\x0a'+_0x4799b0[_0x59317b(0x22d)],_0x4799b0[_0x59317b(0xd7)]),_0x4799b0['JDToE']),_0x4799b0['IfuJj'])+('\x20\x20\x20\x20\x20\x20for\x20(const\x20__sdCol\x20of\x20'+JSON['stringify'](SOFT_DELETE_COLUMNS)+_0x59317b(0x234)),_0x59317b(0x159)),_0x4799b0[_0x59317b(0x1bd)]),_0x59317b(0x240)),'\x20\x20\x20\x20return\x20formatted;');}function buildAuditColumnsSection(_0x2d2bcf,_0x194a9d){const _0x386395=a0_0x25cec5,_0x45d7ba={'zuXhF':function(_0x590b87,_0x18425f){return _0x590b87 in _0x18425f;},'zDMjq':_0x386395(0x225),'XRyBL':function(_0x3295f2,_0x370fca){return _0x3295f2===_0x370fca;},'tLjBt':'object','smAaA':_0x386395(0xcc),'pMJJO':_0x386395(0xb0)};if(!_0x45d7ba[_0x386395(0x263)](_0x45d7ba[_0x386395(0x25b)],_0x2d2bcf))return'';const _0x1b0597=_0x2d2bcf['auditColumns'];if(_0x45d7ba['XRyBL'](_0x1b0597,![])||_0x1b0597===null)return'\x0a'+_0x194a9d+_0x386395(0x206)+_0x194a9d+'this.auditColumns\x20=\x20null;\x0a';if(_0x45d7ba[_0x386395(0x128)](typeof _0x1b0597,_0x45d7ba[_0x386395(0xbe)])&&!Array[_0x386395(0x294)](_0x1b0597)){const _0x1c7764=[_0x45d7ba['smAaA'],_0x386395(0x1ae),'updatedAt',_0x45d7ba[_0x386395(0x14c)]],_0x251e5d={};_0x1c7764[_0x386395(0x290)](_0x5638f0=>{if(_0x1b0597[_0x5638f0]!==undefined)_0x251e5d[_0x5638f0]=_0x1b0597[_0x5638f0];});const _0x1179fd=JSON[_0x386395(0xb7)](_0x251e5d,null,0x2)['split']('\x0a')[_0x386395(0x12a)]((_0x123d82,_0x1dfe0f)=>_0x1dfe0f===0x0?_0x123d82:_0x194a9d+_0x123d82)[_0x386395(0x117)]('\x0a');return'\x0a'+_0x194a9d+'//\x20Custom\x20audit\x20columns\x20mapping\x20dari\x20payload\x0a'+_0x194a9d+_0x386395(0x15e)+_0x1179fd+';\x0a';}throw new Error(_0x386395(0x116)+_0x2d2bcf['tableName']+_0x386395(0x1f9));}function buildSearchColumnsCode(_0x16b3b0){const _0x8cef1f=a0_0x25cec5;if(!_0x16b3b0['searchColumns']||!Array[_0x8cef1f(0x294)](_0x16b3b0['searchColumns']))return'';return _0x8cef1f(0x15a)+JSON['stringify'](_0x16b3b0[_0x8cef1f(0x28b)],null,0x4)+_0x8cef1f(0x143);}function buildFiltersCode(_0xbce923){const _0x4925b0=a0_0x25cec5;if(!_0xbce923['filters']||!Array[_0x4925b0(0x294)](_0xbce923[_0x4925b0(0x124)]))return'';return _0x4925b0(0x10b)+JSON[_0x4925b0(0xb7)](_0xbce923['filters'],null,0x4)+';\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Membangun\x20clause\x20WHERE\x20berdasarkan\x20filter\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Filter\x20options\x0a\x20\x20\x20*\x20@returns\x20{String}\x20Clause\x20WHERE\x20SQL\x0a\x20\x20\x20*/\x0a\x20\x20buildFilterWhereClause(options)\x20{\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20\x20\x20const\x20filters\x20=\x20this.getAvailableFilters();\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(filters))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20filter\x20berdasarkan\x20tipe\x0a\x20\x20\x20\x20for\x20(const\x20filter\x20of\x20filters)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20filterValue\x20=\x20options[filter.name];\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(!filterValue\x20||\x20filterValue\x20===\x20\x27\x27\x20||\x20filterValue\x20===\x20\x27-\x27\x20||\x20filterValue\x20===\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20switch\x20(filter.type)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27combobox\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27select\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20filterValue.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${filter.targetField})\x20=\x20UPPER(\x27${escapedValue}\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27daterange\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filterValue\x20===\x20\x27custom_range\x27\x20&&\x20options[filter.startField]\x20&&\x20options[filter.endField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20startDate\x20=\x20options[filter.startField];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endDate\x20=\x20options[filter.endField];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${filter.targetField}\x20BETWEEN\x20\x27${startDate}\x27\x20AND\x20\x27${endDate}\x27`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27text\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20filterValue.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${filter.targetField})\x20LIKE\x20UPPER(\x27%${escapedValue}%\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27number\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField\x20&&\x20!isNaN(filterValue))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${filter.targetField}\x20=\x20${filterValue}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20conditions.length\x20>\x200\x20?\x20`WHERE\x20${conditions.join(\x27\x20AND\x20\x27)}`\x20:\x20\x27\x27;\x0a\x20\x20}';}function buildDefaultScopeSQL(_0x884277,_0x411820='a.'){const _0x442918=a0_0x25cec5,_0x3132fa={'crJeI':function(_0x1e85e1,_0x481f47){return _0x1e85e1!==_0x481f47;},'ShvtA':'object','KNCpY':'boolean','yiEby':'string'};if(!_0x884277||_0x3132fa[_0x442918(0x1fa)](typeof _0x884277,_0x3132fa[_0x442918(0x243)]))return'';const _0xbb371b=[];for(const [_0x4e26bb,_0x3b66bc]of Object['entries'](_0x884277)){if(typeof _0x3b66bc===_0x3132fa['KNCpY'])_0xbb371b['push'](''+_0x411820+_0x4e26bb+_0x442918(0xb8)+_0x3b66bc);else{if(typeof _0x3b66bc===_0x3132fa['yiEby'])_0xbb371b['push'](''+_0x411820+_0x4e26bb+_0x442918(0x14b)+_0x3b66bc['replace'](/'/g,'\x27\x27')+'\x27');else typeof _0x3b66bc==='number'&&_0xbb371b[_0x442918(0x1c6)](''+_0x411820+_0x4e26bb+_0x442918(0xb8)+_0x3b66bc);}}return _0xbb371b[_0x442918(0x117)]('\x20AND\x20');}function buildRequestScopeMiddleware(_0x34cda8,_0x5d7b9b){const _0x24cb53=a0_0x25cec5,_0x5e6aa1={'ZVksF':function(_0x46050b,_0x318cdc){return _0x46050b||_0x318cdc;}};if(!_0x34cda8['requestScope'])return'';const {column:_0x438b3d,source:_0x3771d6,bypassRoles:_0x1d75ef}=_0x34cda8[_0x24cb53(0x199)],_0x1da487=JSON[_0x24cb53(0xb7)](_0x1d75ef||[]),_0x3238ca=_0x5e6aa1[_0x24cb53(0x20c)](_0x5d7b9b,'')['replace'](/-/g,'_');return'\x0a//\x20───\x20Request\x20Scope\x20Middleware\x20(Layer\x201\x20RLS)\x20──────────────────────────\x0a//\x20Dynamic\x20per-request\x20filtering\x20by\x20\x27'+_0x438b3d+_0x24cb53(0xe3)+_0x3771d6+_0x24cb53(0x1ea)+_0x1da487+_0x24cb53(0x285)+_0x3771d6+_0x24cb53(0x112)+_0x438b3d+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20const\x20scopeCondition\x20=\x20{\x20key:\x20\x27'+_0x438b3d+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20//\x20READ\x20operations:\x20inject\x20scope\x20into\x20req.body.where\x0a\x20\x20if\x20([\x27datatables\x27,\x20\x27read\x27,\x20\x27lookup\x27,\x20\x27read-composite\x27].includes(endpoint))\x20{\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20[scopeCondition];\x0a\x20\x20\x20\x20}\x20else\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20}\x20else\x20if\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20originalLogic\x20=\x20req.body.where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(originalLogic\x20===\x20\x27AND\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.conditions.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logic:\x20\x27AND\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20scopeCondition,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20logic:\x20originalLogic,\x20conditions:\x20req.body.where.conditions\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20DELETE:\x20prepend\x20scope\x20condition\x20to\x20where\x20array\x0a\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27)\x20{\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE\x20/\x20ADD:\x20force\x20scope\x20column\x20value\x0a\x20\x20if\x20(endpoint\x20===\x20\x27add\x27\x20||\x20endpoint\x20===\x20\x27create\x27)\x20{\x0a\x20\x20\x20\x20req.body[\x27'+_0x438b3d+_0x24cb53(0x175)+_0x438b3d+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE-COMPOSITE\x20/\x20UPDATE-COMPOSITE:\x20force\x20scope\x20column\x20inside\x20master\x20body.\x0a\x20\x20//\x20Master\x20is\x20wrapped\x20at\x20req.body[rootKey];\x20detail\x20rows\x20inherit\x20scope\x20transitively\x0a\x20\x20//\x20via\x20master\x20ownership\x20(no\x20direct\x20scope\x20column\x20on\x20detail\x20table).\x0a\x20\x20if\x20(endpoint\x20===\x20\x27create-composite\x27\x20||\x20endpoint\x20===\x20\x27update-composite\x27)\x20{\x0a\x20\x20\x20\x20const\x20masterBody\x20=\x20req.body[\x27'+_0x3238ca+'\x27]\x20||\x20req.body;\x0a\x20\x20\x20\x20masterBody[\x27'+_0x438b3d+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function buildSoftDeleteReadMiddleware(_0x27939e){const _0x20a076=a0_0x25cec5,_0x418efa=softDeleteVisibilityFilter(_0x27939e);if(_0x418efa===null)return'';const _0x443ca2=_0x27939e[_0x20a076(0x111)]&&_0x27939e['softDelete']['visibility']||'active_only';return'\x0a//\x20───\x20Soft-Delete\x20Read\x20Filter\x20Middleware\x20(R15)\x20─────────────────────\x0a//\x20Default\x20Invisible:\x20inject\x20filter\x20\x27'+IS_DELETED_COLUMN+'\x27\x20untuk\x20endpoint\x20read\x20berdasarkan\x0a//\x20visibility\x20config\x20(\x27'+_0x443ca2+'\x27).\x20Config-driven\x20(tanpa\x20body\x20options),\x20diterapkan\x20tanpa\x0a//\x20syarat\x20auth\x20(visibility\x20filter,\x20BUKAN\x20RLS\x20—\x20karena\x20itu\x20tidak\x20ada\x20guard\x20!req.user).\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20!==\x20\x27POST\x27)\x20return\x20next();\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20if\x20(![\x27datatables\x27,\x20\x27read\x27,\x20\x27lookup\x27,\x20\x27aggregate\x27].includes(endpoint))\x20return\x20next();\x0a\x0a\x20\x20const\x20softDeleteCondition\x20=\x20{\x20key:\x20\x27'+IS_DELETED_COLUMN+_0x20a076(0x1d7)+_0x418efa+'\x20};\x0a\x0a\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20req.body.where\x20=\x20[softDeleteCondition];\x0a\x20\x20}\x20else\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20req.body.where.unshift(softDeleteCondition);\x0a\x20\x20}\x20else\x20if\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions))\x20{\x0a\x20\x20\x20\x20const\x20originalLogic\x20=\x20req.body.where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20if\x20(originalLogic\x20===\x20\x27AND\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where.conditions.unshift(softDeleteCondition);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logic:\x20\x27AND\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20softDeleteCondition,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20logic:\x20originalLogic,\x20conditions:\x20req.body.where.conditions\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function buildLookupOverrideCode(_0x2496e4,_0x428c41){const _0xb3b532=a0_0x25cec5,_0x400527={'ohmIq':function(_0x1494c2,_0x38b4af){return _0x1494c2(_0x38b4af);},'qufwU':function(_0x1fdc3d,_0x28e14b){return _0x1fdc3d!==_0x28e14b;},'lCtrY':function(_0x53f6c3,_0x1021db){return _0x53f6c3+_0x1021db;},'ErNKX':function(_0x2e628a,_0x2f3716){return _0x2e628a+_0x2f3716;}},_0x2d4dbc=FileUtils['detectTextColumn'](_0x428c41['fieldName']||[]),_0x3fdf87=FileUtils['toPascalCase'](_0x2496e4),_0x4144b5=_0x428c41['_extendedFields']||{'all':_0x428c41[_0xb3b532(0x146)]||[]},_0x19a934=_0x428c41['primaryKey']||_0x428c41['fieldName']&&_0x428c41['fieldName'][0x0]||'id',_0x2609a8=_0x428c41[_0xb3b532(0x13d)]&&_0x428c41['defaultScope'][_0xb3b532(0x14d)]?buildDefaultScopeSQL(_0x428c41[_0xb3b532(0x13d)]['lookup']):'',_0x344cf8=((()=>{const _0x17cd50=_0xb3b532,_0x1b2719=_0x400527['ohmIq'](softDeleteVisibilityFilter,_0x428c41);return _0x400527[_0x17cd50(0x237)](_0x1b2719,null)?_0x400527['lCtrY'](_0x400527[_0x17cd50(0x24e)](_0x400527[_0x17cd50(0x123)]('a.',IS_DELETED_COLUMN),'\x20=\x20'),_0x1b2719):'';})()),_0x43b98a=[_0x2609a8,_0x344cf8]['filter'](Boolean)[_0xb3b532(0x117)]('\x20AND\x20');return _0xb3b532(0x1e1)+_0x2d4dbc+'\x27\x20yang\x20benar\x0a\x20\x20\x20*\x20@param\x20{string}\x20search\x20-\x20Kata\x20kunci\x20pencarian\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Array\x20objek\x20hasil\x20lookup\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getLookupData(search)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20\x27SELECT\x20'+_0x19a934+',\x20'+_0x2d4dbc+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20`\x20WHERE\x20upper(a.'+_0x2d4dbc+_0xb3b532(0xd5)+(_0x2609a8?_0xb3b532(0x25a)+_0x2609a8:'')+(_0x344cf8?_0xb3b532(0x25a)+_0x344cf8:'')+'\x20ORDER\x20BY\x20a.'+_0x2d4dbc+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20params\x20=\x20[`%${search\x20||\x20\x27\x27}%`];\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x19a934+_0xb3b532(0x214)+_0x2d4dbc+_0xb3b532(0x1fd)+_0x3fdf87+_0xb3b532(0x229)+JSON['stringify'](_0x428c41[_0xb3b532(0x230)]||null)+';\x0a\x20\x20\x20\x20\x20\x20const\x20textFields\x20=\x20lookupConfig\x20&&\x20lookupConfig.searchFields.length\x20>\x200\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20lookupConfig.searchFields\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20'+JSON['stringify'](_0x4144b5['textFields']||[_0x2d4dbc])+';\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20whereConditions\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a'+(_0x2609a8?'\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`'+_0x2609a8+_0xb3b532(0x274):'')+(_0x344cf8?'\x0a\x20\x20\x20\x20\x20\x20//\x20Soft-delete\x20visibility\x20scope\x20(R15)\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`'+_0x344cf8+_0xb3b532(0x274):'')+'\x0a\x20\x20\x20\x20\x20\x20//\x20Add\x20search\x20conditions\x20untuk\x20text\x20fields\x0a\x20\x20\x20\x20\x20\x20if\x20(search\x20&&\x20search.trim())\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20searchConditions\x20=\x20textFields.map(field\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`upper(a.${field})\x20LIKE\x20upper($${paramIndex++})`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`(${searchConditions.join(\x27\x20OR\x20\x27)})`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20search\x20parameter\x20for\x20each\x20text\x20field\x0a\x20\x20\x20\x20\x20\x20\x20\x20textFields.forEach(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${search.trim()}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Add\x20extra\x20filters\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(extraFilters))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20&&\x20'+JSON[_0xb3b532(0xb7)](_0x428c41[_0xb3b532(0x146)]||[])+'.includes(key))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`a.${key}\x20=\x20$${paramIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20final\x20query\x20-\x20gunakan\x20custom\x20select\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20idField\x20=\x20lookupConfig\x20?\x20lookupConfig.idField\x20:\x20\x27'+_0x19a934+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20textField\x20=\x20lookupConfig\x20&&\x20lookupConfig.hasCustomText\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20lookupConfig.textField\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20textFields[0];\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20query\x20=\x20`SELECT\x20${idField},\x20${textField}\x20FROM\x20${this.getLookupSource()}`;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereConditions.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`\x20WHERE\x20${whereConditions.join(\x27\x20AND\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20query\x20+=\x20`\x20ORDER\x20BY\x20${lookupConfig\x20&&\x20lookupConfig.hasCustomText\x20?\x20\x272\x27\x20:\x20\x27a.\x27\x20+\x20textFields[0]}`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20DEBUG\x20DYNAMIC\x20LOOKUP\x20===\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Query:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Params:\x27,\x20params);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Extra\x20filters:\x27,\x20extraFilters);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Lookup\x20config:\x27,\x20lookupConfig);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20END\x20DEBUG\x20===\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item[idField]\x20||\x20item.'+_0x19a934+_0xb3b532(0x20b)+_0x3fdf87+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getStaticLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0x2d4dbc+_0xb3b532(0x17a)+_0x19a934+',\x20'+_0x2d4dbc+_0xb3b532(0xa9)+(_0x43b98a?_0xb3b532(0x1f4)+_0x43b98a:'')+_0xb3b532(0x173)+_0x2d4dbc+_0xb3b532(0xc5)+_0x19a934+_0xb3b532(0x214)+_0x2d4dbc+_0xb3b532(0x10f)+_0x19a934+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x2d4dbc+_0xb3b532(0x1ac)+_0x19a934+'\x20===\x20selectedTag)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.selected\x20=\x20\x27true\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getStaticLookupData\x20('+_0x3fdf87+_0xb3b532(0x25e)+_0x19a934+_0xb3b532(0x21e)+_0x2d4dbc+_0xb3b532(0x161)+JSON['stringify'](_0x4144b5[_0xb3b532(0x21b)]||[])+';\x0a\x20\x20\x20\x20\x20\x20let\x20selectClause\x20=\x20\x27'+_0x19a934+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20textField\x20=\x20\x27'+_0x2d4dbc+_0xb3b532(0xee)+_0x19a934+_0xb3b532(0x1d1)+_0x2d4dbc+'\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${column}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x20//\x20gunakan\x20yang\x20pertama\x20sebagai\x20text\x20field\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Jika\x20bukan\x20recognized\x20field,\x20masih\x20tambahkan\x20(mungkin\x20computed\x20column)\x0a\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${column}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20column;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Bangun\x20query\x20SELECT\x20dengan\x20support\x20expressions\x0a\x20\x20\x20\x20\x20\x20let\x20query\x20=\x20`SELECT\x20${selectClause}\x20FROM\x20${this.getLookupSource()}\x20'+(_0x2609a8?_0xb3b532(0x160)+_0x2609a8+'\x20':'')+_0xb3b532(0x129)+(_0x2609a8?_0xb3b532(0xdc):'WHERE\x20')+'${whereResult.sql}'+(_0x2609a8?')':'')+_0xb3b532(0xa4)+_0x19a934+_0xb3b532(0x276)+_0x2496e4['toUpperCase']()+'\x20LOOKUP\x20WITH\x20FILTER\x20===\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20SQL:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Parameters:\x27,\x20params);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Selected\x20columns:\x27,\x20selectColumns);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Sort\x20columns:\x27,\x20options.sort_columns\x20||\x20\x27none\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Valid\x20fields\x20for\x20ordering:\x27,\x20this.validFields);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Text\x20field:\x27,\x20textField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Alias\x20field:\x27,\x20aliasField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20END\x20DEBUG\x20===\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Eksekusi\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20hasil\x20untuk\x20lookup\x20(id\x20dan\x20text)\x20-\x20gunakan\x20alias\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20textFieldName\x20=\x20aliasField\x20||\x20textField;\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x19a934+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item[textFieldName]\x20||\x20item.'+_0x2d4dbc+'\x20||\x20item.name\x20||\x20item.code\x20||\x20item.description\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter\x20('+_0x3fdf87+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}';}function buildAdvancedQuerySection(_0x22ad54){const _0x4ff233=a0_0x25cec5,_0x2befdd={'vicvP':function(_0x167104,_0x54d9cb){return _0x167104===_0x54d9cb;},'RpEpX':'//\x20No\x20advanced\x20queries\x20defined'},_0x2d1ae5=_0x22ad54['advancedQueries']||{};if(_0x2befdd['vicvP'](Object[_0x4ff233(0xec)](_0x2d1ae5)['length'],0x0))return _0x2befdd['RpEpX'];return _0x4ff233(0xff)+Object[_0x4ff233(0x1c3)](_0x2d1ae5)[_0x4ff233(0x12a)](([_0x3a99ef,_0xe0b2c5])=>_0x4ff233(0xa8)+_0x3a99ef+_0x4ff233(0x21a)+JSON['stringify'](_0xe0b2c5))[_0x4ff233(0x117)](',\x0a')+_0x4ff233(0x137);}function buildQueryLoadingCode(_0x64ce15,_0xddc879){const _0xbdad54=a0_0x25cec5,_0x2d13bd={'nIUoR':_0xbdad54(0x1db)};if(!_0x64ce15)return'let\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;';const _0xb41e9d=_0x64ce15[_0xbdad54(0x20d)](/\$\{tableName\}/g,_0xbdad54(0x1db))['replace'](/\$\{this\.table\}/g,_0x2d13bd[_0xbdad54(0x133)]);return'let\x20baseQuery\x20=\x20`'+_0xb41e9d+'`.trim();';}function buildFieldMappingCode(_0x18e737){const _0x2da9d3=a0_0x25cec5,_0x5bb36d=_0x18e737['_extendedFields']||{};return _0x2da9d3(0x144)+JSON[_0x2da9d3(0xb7)](_0x5bb36d[_0x2da9d3(0x21b)]||[])+',\x0a\x20\x20\x20\x20\x20\x20dateFields:\x20'+JSON['stringify'](_0x5bb36d[_0x2da9d3(0x183)]||[])+_0x2da9d3(0xb5)+JSON['stringify'](_0x5bb36d['requiredFields']||[])+_0x2da9d3(0x121)+(_0x5bb36d[_0x2da9d3(0x13b)]||_0x2da9d3(0xe6))+'\x27,\x0a\x20\x20\x20\x20\x20\x20searchableFields:\x20this.getSearchableColumns\x20?\x20this.getSearchableColumns().map(col\x20=>\x20col.name)\x20:\x20[]\x0a\x20\x20\x20\x20};\x0a\x20\x20}';}function _generateValidationConfig(_0x5abbeb){const _0x56e0b6=a0_0x25cec5,_0x5387d4={'dbvRk':'\x0a\x20\x20\x20\x20\x20\x20','SHUDl':_0x56e0b6(0x15f)};if(!_0x5abbeb||!Array[_0x56e0b6(0x294)](_0x5abbeb)||_0x5abbeb[_0x56e0b6(0x25c)]===0x0)return _0x5387d4['SHUDl'];const _0x3d0fb3=_0x5abbeb[_0x56e0b6(0x12a)](_0x365eaa=>{const _0x33d125=_0x56e0b6,_0x90e662=JSON['stringify'](_0x365eaa[_0x33d125(0x1f7)]||{},null,0x6)['replace'](/\n/g,_0x5387d4[_0x33d125(0x1af)]);return _0x33d125(0xd0)+_0x365eaa[_0x33d125(0xe6)]+'\x27:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20type:\x20\x27'+_0x365eaa[_0x33d125(0xae)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20constraints:\x20'+_0x90e662+'\x0a\x20\x20\x20\x20\x20\x20}';})['join'](',\x0a');return'\x20\x20\x20\x20//\x20Field\x20validation\x20configuration\x0a\x20\x20\x20\x20this.validationConfig\x20=\x20{\x0a'+_0x3d0fb3+'\x0a\x20\x20\x20\x20};\x0a';}function _generateValidateFieldConstraints(){return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20field\x20dengan\x20constraints\x0a\x20\x20\x20*\x20@param\x20{string}\x20fieldName\x20-\x20Nama\x20field\x0a\x20\x20\x20*\x20@param\x20{*}\x20value\x20-\x20Nilai\x20field\x0a\x20\x20\x20*\x20@param\x20{string}\x20operation\x20-\x20Operation\x20(insert/update)\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Validation\x20result\x20{valid,\x20errors,\x20warnings,\x20sanitized}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20validateFieldConstraints(fieldName,\x20value,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20if\x20(!config)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20true,\x20sanitized:\x20value,\x20errors:\x20[],\x20warnings:\x20[]};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20true,\x0a\x20\x20\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x20\x20\x20\x20const\x20fieldType\x20=\x20config.type\x20||\x20\x27string\x27;\x0a\x0a\x20\x20\x20\x20//\x201.\x20Check\x20required\x0a\x20\x20\x20\x20if\x20(constraints.required\x20&&\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Skip:\x20autoGenerate\x20atau\x20primaryKey\x20di\x20insert\x0a\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20(constraints.autoGenerate\x20||\x20constraints.primaryKey))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20akan\x20di-generate\x20otomatis\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20//\x20Skip:\x20update\x20partial\x20—\x20field\x20tidak\x20dikirim\x20berarti\x20tidak\x20diubah\x0a\x20\x20\x20\x20\x20\x20else\x20if\x20(operation\x20===\x20\x27update\x27\x20&&\x20value\x20===\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20field\x20tidak\x20sedang\x20di-update\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.requiredMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20is\x20required`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.valid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Skip\x20validation\x20jika\x20value\x20kosong\x20dan\x20tidak\x20required\x0a\x20\x20\x20\x20if\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x202.\x20Type-specific\x20validation\x0a\x20\x20\x20\x20switch\x20(fieldType)\x20{\x0a\x20\x20\x20\x20\x20\x20case\x20\x27string\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20await\x20this._validateStringConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27integer\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27decimal\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27number\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateNumberConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27datetime\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27timestamp\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27time\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateDateConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27boolean\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateBooleanConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27uuid\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateUuidConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27array\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateArrayConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27json\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateJsonConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20string\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20async\x20_validateStringConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20String(value);\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20const\x20isHashField\x20=\x20constraints.hash\x20===\x20\x27bcrypt\x27;\x0a\x0a\x20\x20\x20\x20//\x20Trim\x0a\x20\x20\x20\x20if\x20(constraints.trim)\x20{\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.trim();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Case\x20transformation\x20(skip\x20jika\x20hash\x20field\x20—\x20tidak\x20relevan\x20untuk\x20password)\x0a\x20\x20\x20\x20if\x20(!isHashField)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.lowercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toLowerCase();\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(constraints.uppercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toUpperCase();\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Length\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20if\x20(constraints.minLength\x20&&\x20sanitized.length\x20<\x20constraints.minLength)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.minLength}\x20characters`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.maxLength\x20&&\x20!isHashField\x20&&\x20sanitized.length\x20>\x20constraints.maxLength)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxLength}\x20characters`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Pattern\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20if\x20(constraints.pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20regex\x20=\x20new\x20RegExp(constraints.pattern);\x0a\x20\x20\x20\x20\x20\x20if\x20(!regex.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.patternMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20does\x20not\x20match\x20required\x20pattern`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Format\x20validation\x20(email,\x20phone,\x20url,\x20uuid)\x0a\x20\x20\x20\x20if\x20(constraints.format)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20formatValid\x20=\x20this._validateFormat(sanitized,\x20constraints.format);\x0a\x20\x20\x20\x20\x20\x20if\x20(!formatValid.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20has\x20invalid\x20${constraints.format}\x20format`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Enum\x20validation\x0a\x20\x20\x20\x20if\x20(constraints.enum\x20&&\x20Array.isArray(constraints.enum))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!constraints.enum.includes(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.enumMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20one\x20of:\x20${constraints.enum.join(\x27,\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Skip\x20unique\x20constraint\x20-\x20database\x20akan\x20handle\x20via\x20UNIQUE\x20index\x0a\x20\x20\x20\x20//\x20if\x20(constraints.unique)\x20{\x20/*\x20handled\x20by\x20database\x20*/\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hash\x20transformation\x20(setelah\x20semua\x20validation\x20pass,\x20sebelum\x20return)\x0a\x20\x20\x20\x20if\x20(isHashField\x20&&\x20errors.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20bcrypt\x20=\x20require(\x27bcrypt\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20cost\x20=\x20constraints.hashCost\x20||\x2010;\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20await\x20bcrypt.hash(sanitized,\x20cost);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20number\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateNumberConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20to\x20number\x0a\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20parseFloat(sanitized);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(isNaN(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20number`);\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Min/Max\x0a\x20\x20\x20\x20if\x20(constraints.min\x20!==\x20undefined\x20&&\x20sanitized\x20<\x20constraints.min)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.min}`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.max\x20!==\x20undefined\x20&&\x20sanitized\x20>\x20constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.max}`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Positive/Negative\x0a\x20\x20\x20\x20if\x20(constraints.positive\x20&&\x20sanitized\x20<=\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.positiveMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20positive`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.negative\x20&&\x20sanitized\x20>=\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.negativeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20negative`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Integer\x20check\x0a\x20\x20\x20\x20if\x20(constraints.integer\x20&&\x20!Number.isInteger(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.integerMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20an\x20integer`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Precision/Scale\x20for\x20decimal\x0a\x20\x20\x20\x20if\x20(constraints.precision\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20decimals\x20=\x20(sanitized.toString().split(\x27.\x27)[1]\x20||\x20\x27\x27).length;\x0a\x20\x20\x20\x20\x20\x20if\x20(decimals\x20>\x20constraints.precision)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.precisionMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20at\x20most\x20${constraints.precision}\x20decimal\x20places`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20date\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateDateConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20//\x20Basic\x20date\x20validation\x20(more\x20complex\x20parsing\x20handled\x20by\x20DateTimeParser\x20in\x20basemodel)\x0a\x20\x20\x20\x20//\x20Min/Max\x20date\x20range\x0a\x20\x20\x20\x20if\x20(constraints.min\x20||\x20constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20dateValue\x20=\x20new\x20Date(sanitized);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isNaN(dateValue.getTime()))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20date`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.min)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20minDate\x20=\x20new\x20Date(constraints.min);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(dateValue\x20<\x20minDate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20on\x20or\x20after\x20${constraints.min}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20maxDate\x20=\x20new\x20Date(constraints.max);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(dateValue\x20>\x20maxDate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20on\x20or\x20before\x20${constraints.max}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20date`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Before/After\x20relasi\x20akan\x20divalidasi\x20di\x20_validateCrossFieldConstraints\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20boolean\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateBooleanConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20if\x20(constraints.strict)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20!==\x20\x27boolean\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Terima\x20hanya\x20set\x20kanonik\x20(selaras\x20MySQL/Oracle/SQLite):\x20true/\x27true\x27/1/\x271\x27\x0a\x20\x20\x20\x20\x20\x20//\x20dan\x20false/\x27false\x27/0/\x270\x27.\x20Nilai\x20lain\x20DITOLAK,\x20bukan\x20dipaksa\x20via\x20Boolean()\x0a\x20\x20\x20\x20\x20\x20//\x20(yang\x20membuat\x20string\x20non-kosong\x20seperti\x20\x27not-a-boolean\x27\x20diam-diam\x20jadi\x0a\x20\x20\x20\x20\x20\x20//\x20true).\x20Menjamin\x201\x20input\x20->\x20behavior\x20identik\x20lintas\x20dialect.\x0a\x20\x20\x20\x20\x20\x20if\x20(sanitized\x20===\x20true\x20||\x20sanitized\x20===\x20\x27true\x27\x20||\x20sanitized\x20===\x201\x20||\x20sanitized\x20===\x20\x271\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(sanitized\x20===\x20false\x20||\x20sanitized\x20===\x20\x27false\x27\x20||\x20sanitized\x20===\x200\x20||\x20sanitized\x20===\x20\x270\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20UUID\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateUuidConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20const\x20uuidRegex\x20=\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\x0a\x0a\x20\x20\x20\x20if\x20(!uuidRegex.test(value))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20UUID`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20array\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateArrayConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20an\x20array`);\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20minItems/maxItems\x0a\x20\x20\x20\x20if\x20(constraints.minItems\x20&&\x20value.length\x20<\x20constraints.minItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20at\x20least\x20${constraints.minItems}\x20items`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.maxItems\x20&&\x20value.length\x20>\x20constraints.maxItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxItems}\x20items`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20uniqueItems\x0a\x20\x20\x20\x20if\x20(constraints.uniqueItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20unique\x20=\x20[...new\x20Set(value)];\x0a\x20\x20\x20\x20\x20\x20if\x20(unique.length\x20!==\x20value.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.uniqueItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20unique\x20items`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20JSON\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateJsonConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20jika\x20string\x0a\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20JSON.parse(sanitized);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20valid\x20JSON`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20JSON\x20Schema\x20validation\x20bisa\x20ditambahkan\x20di\x20sini\x20jika\x20diperlukan\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20format\x20(email,\x20phone,\x20url,\x20uuid)\x0a\x20\x20\x20*/\x0a\x20\x20_validateFormat(value,\x20format)\x20{\x0a\x20\x20\x20\x20const\x20patterns\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20email:\x20/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/,\x0a\x20\x20\x20\x20\x20\x20phone:\x20/^[\x5cd\x5cs\x5c-\x5c+\x5c(\x5c)]+$/,\x0a\x20\x20\x20\x20\x20\x20url:\x20/^https?:\x5c/\x5c/.+/,\x0a\x20\x20\x20\x20\x20\x20uuid:\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20pattern\x20=\x20patterns[format];\x0a\x20\x20\x20\x20if\x20(!pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20true};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{valid:\x20pattern.test(value)};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20cross-field\x20constraints\x20(before/after\x20date)\x0a\x20\x20\x20*/\x0a\x20\x20async\x20_validateCrossFieldConstraints(data,\x20operation)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.before)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeField\x20=\x20constraints.before;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data[fieldName]\x20&&\x20data[beforeField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(new\x20Date(data[fieldName])\x20>=\x20new\x20Date(data[beforeField]))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.beforeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20before\x20\x27${beforeField}\x27`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Invalid\x20date\x20format\x20for\x20field\x20\x27${fieldName}\x27:\x20cannot\x20compare\x20dates`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.after)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterField\x20=\x20constraints.after;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data[fieldName]\x20&&\x20data[afterField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(new\x20Date(data[fieldName])\x20<=\x20new\x20Date(data[afterField]))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.afterMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20after\x20\x27${afterField}\x27`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Invalid\x20date\x20format\x20for\x20field\x20\x27${fieldName}\x27:\x20cannot\x20compare\x20dates`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a';}function generateCompositeMethods(_0x5ec384){const _0x3dc827=a0_0x25cec5,_0x36dee8={'EJCaH':'generated','pOcDC':function(_0xd8c4fb,_0x3474b8){return _0xd8c4fb+_0x3474b8;}},_0x22b720=_0x5ec384[_0x3dc827(0xbd)]||{},_0x4da087=_0x5ec384['masterDetail']&&_0x5ec384[_0x3dc827(0x149)][_0x3dc827(0x15b)];if(!_0x4da087||!_0x22b720['createComposite']&&!_0x22b720[_0x3dc827(0xf4)]&&!_0x22b720['readComposite'])return'';const _0x167dba=_0x5ec384['masterDetail'][_0x3dc827(0xb6)],_0x20a240=_0x5ec384[_0x3dc827(0x149)]['foreignKey'],_0x2865f5=_0x5ec384['primaryKey']||'id';let _0x37f1b3='\x0a';if(_0x22b720['createComposite']){const _0x1a98c9=_0x5ec384[_0x3dc827(0x149)]?.[_0x3dc827(0x1bc)]?.[_0x3dc827(0x107)]||_0x167dba[_0x3dc827(0x16a)]('.')['pop']()+_0x3dc827(0x251),_0x1093b2=_0x5ec384[_0x3dc827(0x149)]?.['detailConfig']?.['autoCalculateFields']||{},_0x439c17=[],_0x389df7=[];for(const [_0x5e0297,_0x4f0e47]of Object['entries'](_0x1093b2)){if(_0x4f0e47['type']===_0x36dee8[_0x3dc827(0x280)])_0x439c17[_0x3dc827(0x1c6)](_0x5e0297);else{const _0x218002=(_0x4f0e47[_0x3dc827(0x1cb)]||'')['split']('*')[_0x3dc827(0x12a)](_0x357ee5=>_0x357ee5[_0x3dc827(0x228)]());_0x389df7['push']({'fieldName':_0x5e0297,'qtyField':_0x218002[0x0],'priceField':_0x218002[0x1]});}}const _0x5517c9=_0x389df7[_0x3dc827(0x12a)](_0x404ece=>{const _0x25360b=_0x3dc827;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x404ece[_0x25360b(0x146)]+_0x25360b(0xb8)+_0x404ece[_0x25360b(0xc7)]+'\x20*\x20'+_0x404ece['priceField']+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20item.'+_0x404ece[_0x25360b(0x146)]+_0x25360b(0x179)+_0x404ece['qtyField']+_0x25360b(0x11e)+_0x404ece['priceField']+_0x25360b(0x1de);})['join']('\x0a');_0x37f1b3+=_0x3dc827(0x1ef)+_0x167dba[_0x3dc827(0x16a)]('.')[_0x3dc827(0x231)]()+_0x3dc827(0xd1)+_0x5ec384[_0x3dc827(0x152)]+_0x3dc827(0x238)+_0x167dba+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x20a240+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27insert\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeInsert\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerPlaceholders.push(`$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(created_at,\x20created_by,\x20updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendCreateAuditColumns(headerFields,\x20headerValues,\x20headerPlaceholders,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerInsertQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20${this.writeSource}\x20(${headerFields.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(${headerPlaceholders.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20INSERT:\x27,\x20{\x20query:\x20headerInsertQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerInsertQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20insertedHeader\x20=\x20headerResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20const\x20masterPrimaryKeyValue\x20=\x20insertedHeader[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20inserted\x20successfully:\x20${this.primaryKey}=${masterPrimaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Insert\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x167dba+_0x3dc827(0x1ff)+_0x20a240+_0x3dc827(0x187)+(_0x439c17[_0x3dc827(0x25c)]>0x0?_0x3dc827(0x27a)+JSON['stringify'](_0x439c17)+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailPrimaryKey\x20=\x20\x27'+_0x1a98c9+_0x3dc827(0xb1)+(_0x5517c9?_0x36dee8['pOcDC']('\x0a'+_0x5517c9,'\x0a'):'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x439c17['length']>0x0?_0x3dc827(0xb3):'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholders.push(`$${detailPlaceholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholderIndex\x20=\x20this._appendCreateAuditColumns(detailFields,\x20detailValues,\x20detailPlaceholders,\x20item,\x20eventContext,\x20detailPlaceholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailInsertQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20${detailTableName}\x20(${detailFields.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(${detailPlaceholders.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20detail\x20INSERT:\x27,\x20{\x20query:\x20detailInsertQuery,\x20values:\x20detailValues\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20client.query(detailInsertQuery,\x20detailValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20insertedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Inserted\x20${insertedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeInsert\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterCtx\x20=\x20CB.buildCompositeInsertAfterContext(headerData,\x20insertedHeader,\x20insertedItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x5ec384['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x167dba+_0x3dc827(0x10c)+_0x20a240+_0x3dc827(0x1fe);}if(_0x22b720[_0x3dc827(0xf4)]){const _0x5b8ceb=_0x5ec384[_0x3dc827(0x149)]?.['detailConfig']?.['primaryKey']||_0x167dba[_0x3dc827(0x16a)]('.')['pop']()+'_id',_0x589367=_0x5ec384[_0x3dc827(0x149)]?.[_0x3dc827(0x21d)]||null,_0x431e10=_0x5ec384[_0x3dc827(0x149)]?.['detailConfig']?.[_0x3dc827(0x25d)]||{},_0x47bfdd=[],_0x562334=[];for(const [_0x53b5a6,_0x52a4ff]of Object['entries'](_0x431e10)){if(_0x52a4ff[_0x3dc827(0xae)]===_0x36dee8['EJCaH'])_0x47bfdd['push'](_0x53b5a6);else{const _0x2ec147=(_0x52a4ff[_0x3dc827(0x1cb)]||'')[_0x3dc827(0x16a)]('*')[_0x3dc827(0x12a)](_0x3553a2=>_0x3553a2[_0x3dc827(0x228)]());_0x562334['push']({'fieldName':_0x53b5a6,'qtyField':_0x2ec147[0x0],'priceField':_0x2ec147[0x1]});}}const _0x3934c7=_0x562334['map'](_0x562e2b=>{const _0x2473da=_0x3dc827;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x562e2b[_0x2473da(0x146)]+'\x20=\x20'+_0x562e2b[_0x2473da(0xc7)]+'\x20*\x20'+_0x562e2b['priceField']+_0x2473da(0x1e7)+_0x562e2b['fieldName']+_0x2473da(0x179)+_0x562e2b['qtyField']+')\x20||\x200)\x20*\x20(Number(item.'+_0x562e2b[_0x2473da(0x28a)]+')\x20||\x200);';})[_0x3dc827(0x117)]('\x0a'),_0x2fcd91=_0x5ec384[_0x3dc827(0x149)]?.[_0x3dc827(0x1bc)]?.['autoCalculateFields']?.[_0x3dc827(0xf8)]?.['formula']||'',_0x1b973c=_0x2fcd91[_0x3dc827(0x16a)]('*')[_0x3dc827(0x12a)](_0x3b9ba5=>_0x3b9ba5['trim']()),_0x348e08=_0x5ec384[_0x3dc827(0x149)]?.['headerCalculations']?.[_0x3dc827(0x102)]?.['source']?.[_0x3dc827(0x20d)](_0x3dc827(0x24b),'')||'',_0x3bff8f=_0x1b973c[0x0]||_0x348e08,_0xde83a1=_0x1b973c[0x1]||'unit_price';_0x37f1b3+=_0x3dc827(0x257)+_0x167dba[_0x3dc827(0x16a)]('.')[_0x3dc827(0x231)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20update:\x20detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x5ec384[_0x3dc827(0x152)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x167dba+_0x3dc827(0x10c)+_0x20a240+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27update\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeUpdate\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(`${key}\x20=\x20$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendUpdateAuditColumns(headerFields,\x20headerValues,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20headerValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20const\x20headerUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${headerFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${placeholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20UPDATE:\x27,\x20{\x20query:\x20headerUpdateQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerUpdateQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20updatedHeader\x20=\x20headerResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20updated\x20successfully:\x20${this.primaryKey}=${primaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Process\x20detail\x20items\x20with\x20insert/update/delete\x20pattern\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x167dba+_0x3dc827(0x1ff)+_0x20a240+_0x3dc827(0x19b)+_0x5b8ceb+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+(_0x47bfdd[_0x3dc827(0x25c)]>0x0?'const\x20generatedFields\x20=\x20'+JSON['stringify'](_0x47bfdd)+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailOperations\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20const\x20{\x20insert:\x20insertItems\x20=\x20[],\x20update:\x20updateItems\x20=\x20[],\x20delete:\x20deleteItems\x20=\x20[]\x20}\x20=\x20detailOperations;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20updatedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Process\x20DELETE\x20operations\x20first\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20deleteItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!item[detailPrimaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Missing\x20${detailPrimaryKey}\x20in\x20delete\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20deleteQuery\x20=\x20`DELETE\x20FROM\x20${detailTableName}\x20WHERE\x20${detailPrimaryKey}\x20=\x20$1\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20deleteResult\x20=\x20await\x20client.query(deleteQuery,\x20[item[detailPrimaryKey]]);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(deleteResult.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deletedItems.push(deleteResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Deleted\x20${deletedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Process\x20UPDATE\x20operations\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20updateItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!item[detailPrimaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Missing\x20${detailPrimaryKey}\x20in\x20update\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0x3934c7?_0x36dee8['pOcDC']('\x0a',_0x3934c7)+'\x0a':'')+_0x3dc827(0xd8)+(_0x47bfdd[_0x3dc827(0x25c)]>0x0?_0x3dc827(0xb3):'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(`${key}\x20=\x20$${detailPlaceholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20detail\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholderIndex\x20=\x20this._appendUpdateAuditColumns(detailFields,\x20detailValues,\x20item,\x20eventContext,\x20detailPlaceholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(item[detailPrimaryKey]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${detailTableName}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${detailFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${detailPrimaryKey}\x20=\x20$${detailPlaceholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20client.query(detailUpdateQuery,\x20detailValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(detailResult.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updatedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Updated\x20${updatedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Process\x20INSERT\x20operations\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20insertItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20foreign\x20key\x20to\x20item\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[foreignKey]\x20=\x20primaryKeyValue;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20dengan\x20createComposite\x20dan\x20konvensi\x20autoGenerate)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item[detailPrimaryKey]\x20===\x20undefined\x20||\x20item[detailPrimaryKey]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item[detailPrimaryKey]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0x3934c7?'\x0a'+_0x3934c7+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x47bfdd[_0x3dc827(0x25c)]>0x0?_0x3dc827(0xb3):'')+_0x3dc827(0xad)+(_0x589367?'\x0a\x20\x20\x20\x20\x20\x20const\x20calculations\x20=\x20'+JSON[_0x3dc827(0xb7)](_0x589367)+_0x3dc827(0x167)+(_0x3bff8f?_0x3dc827(0x1e0)+_0x3bff8f+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0xde83a1+_0x3dc827(0x14f):_0x3dc827(0x157))+_0x3dc827(0x239):'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterCtx\x20=\x20CB.buildCompositeUpdateAfterContext(headerData,\x20oldData,\x20updatedHeader,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x5ec384['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x167dba+_0x3dc827(0x10c)+_0x20a240+_0x3dc827(0xde);}if(_0x22b720[_0x3dc827(0xce)]){const _0x3df1a1=_0x5ec384[_0x3dc827(0x149)]?.['detailConfig']?.[_0x3dc827(0x27d)]||null;let _0x1fbff7;_0x3df1a1?_0x1fbff7='const\x20detailQuery\x20=\x20`'+_0x3df1a1+'`;':_0x1fbff7='const\x20detailQuery\x20=\x20`SELECT\x20*\x20FROM\x20'+_0x167dba+_0x3dc827(0x1f4)+_0x20a240+_0x3dc827(0xef),_0x37f1b3+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20read\x20-\x20Read\x20header\x20with\x20detail\x20items\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Options\x20with\x20where\x20clause\x20(same\x20format\x20as\x20getData)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Records\x20with\x20detail\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20readComposite(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x0a\x20\x20\x20\x20\x20\x20if\x20(!options.where)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20let\x20whereClauseSql;\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Query\x20header\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20whereClauseSql.sql;\x0a\x20\x20\x20\x20\x20\x20params\x20=\x20whereClauseSql.params;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerResults\x20=\x20await\x20db.executeQuery(headerQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(headerResults.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20each\x20header,\x20fetch\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20compositeResults\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x167dba['split']('.')[_0x3dc827(0x231)]()+_0x3dc827(0x187)+_0x1fbff7+'\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20header\x20of\x20headerResults)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResults\x20=\x20await\x20db.executeQuery(detailQuery,\x20[header[this.primaryKey]]);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20compositeResults.push({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...header,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20detailResults\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20compositeResults.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20compositeResults\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20readComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}return _0x37f1b3;}function generateSoftDeleteOverride(_0x3595b9){const _0x3da293=a0_0x25cec5,_0x1d4c6b=_0x3595b9[_0x3da293(0x107)]||_0x3595b9['fieldName']&&_0x3595b9['fieldName'][0x0]||'id',_0x5dc852=_0x3595b9['softDelete']&&Array[_0x3da293(0x294)](_0x3595b9[_0x3da293(0x111)][_0x3da293(0x1e9)])?_0x3595b9[_0x3da293(0x111)]['reusable']:[];if(hasCascadeChildren(_0x3595b9))return generateSoftDeleteCascadeOverride(_0x3595b9);const _0x5f0b1e=Array[_0x3da293(0x294)](_0x3595b9[_0x3da293(0x14a)])?_0x3595b9[_0x3da293(0x14a)][_0x3da293(0x147)](_0x3bc902=>_0x3bc902&&_0x3bc902['onDelete']===_0x3da293(0x1d8)&&typeof _0x3bc902[_0x3da293(0x1b7)]===_0x3da293(0x241)&&_0x3bc902['childTable']&&Array['isArray'](_0x3bc902['childColumns'])&&_0x3bc902[_0x3da293(0x1b6)]['length']===0x1&&typeof _0x3bc902['childColumns'][0x0]===_0x3da293(0x241)&&typeof _0x3bc902['parentColumn']===_0x3da293(0x241)&&_0x3bc902['parentColumn']):[],_0x1d00ee=[_0x1d4c6b];for(const _0xa1b2a8 of _0x5dc852){if(_0xa1b2a8&&_0xa1b2a8['field']&&!_0x1d00ee[_0x3da293(0x289)](_0xa1b2a8['field']))_0x1d00ee['push'](_0xa1b2a8[_0x3da293(0x170)]);}for(const _0x427ded of _0x5f0b1e){if(!_0x1d00ee[_0x3da293(0x289)](_0x427ded['parentColumn']))_0x1d00ee['push'](_0x427ded['parentColumn']);}const _0x95f4e0=_0x1d00ee[_0x3da293(0x117)](',\x20'),_0x5d6d88=_0x5f0b1e['map']((_0x3fec60,_0x3e6e3b)=>{const _0x12cc61=_0x3da293,_0x277e0c=_0x3fec60['childTable'],_0x79110b=_0x3fec60['childColumns'][0x0],_0x55d8b3=_0x3fec60[_0x12cc61(0xfe)],_0x516c94=_0x3fec60['childSoftDelete']===!![],_0x53289a=_0x516c94?'\x20AND\x20'+IS_DELETED_COLUMN+'\x20=\x20FALSE':'';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK-SD-2\x20restrict\x20#'+_0x3e6e3b+':\x20anak\x20\x27'+_0x277e0c+'\x27.'+_0x79110b+'\x20→\x20master.'+_0x55d8b3+'\x20(childSoftDelete='+_0x516c94+')\x20→\x20409\x20bila\x20masih\x20direferensikan\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__restrictVal\x20=\x20lockedRow[\x27'+_0x55d8b3+_0x12cc61(0x25f)+_0x277e0c+_0x12cc61(0x1f4)+_0x79110b+'\x20=\x20$1'+_0x53289a+'\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__restrictVal]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__restrictCheck.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20restrictError\x20=\x20new\x20Error(\x22Cannot\x20delete:\x20record\x20is\x20still\x20referenced\x20by\x20\x27'+_0x277e0c+'\x27\x20(onDelete:\x20restrict)\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20restrictError.statusCode\x20=\x20409;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20restrictError;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x3da293(0x117)](''),_0x3f9227=_0x5dc852[_0x3da293(0x12a)](_0x33ecf1=>{const _0x3c6fc0=_0x3da293,_0x21959b=_0x33ecf1[_0x3c6fc0(0x170)],_0x41d953=_0x33ecf1[_0x3c6fc0(0x25c)];return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20reusable\x20\x27'+_0x21959b+'\x27\x20(base\x20length\x20'+_0x41d953+_0x3c6fc0(0x271)+_0x21959b+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__orig\x20!==\x20null\x20&&\x20__orig\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__str\x20=\x20String(__orig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__str.length\x20>\x20'+_0x41d953+_0x3c6fc0(0x189)+_0x21959b+'\x20value\x20(\x27\x20+\x20__str.length\x20+\x20\x27\x20chars)\x20exceeds\x20base\x20length\x20'+_0x41d953+_0x3c6fc0(0x1cd)+_0x21959b+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(__str\x20+\x20\x27##\x27\x20+\x20uuidv7());\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})['join']('');return _0x3da293(0x1cf)+DELETED_BY_COLUMN+'\x27);\x0a\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Kunci\x20row\x20aktif\x20yang\x20cocok\x20kriteria.\x20Filter\x20is_deleted\x20=\x20FALSE\x20mencegah\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20double\x20soft-delete\x20dan,\x20bersama\x20FOR\x20UPDATE,\x20menjamin\x20satu\x20pemenang\x20saat\x20race.\x0a\x20\x20\x20\x20\x20\x20const\x20selectParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20whereBuilt\x20=\x20this.buildComplexWhereClause(criteria.where,\x20selectParams,\x201);\x0a\x20\x20\x20\x20\x20\x20const\x20lockQuery\x20=\x20\x27SELECT\x20'+_0x95f4e0+_0x3da293(0x267)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x20FOR\x20UPDATE\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20lockResult\x20=\x20await\x20client.query(lockQuery,\x20whereBuilt.params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(lockResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tidak\x20ada\x20row\x20aktif:\x20tidak\x20ditemukan,\x20sudah\x20ter-soft-delete,\x20atau\x20kalah\x20race.\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20notFoundError\x20=\x20new\x20Error(\x27Record\x20not\x20found\x20or\x20already\x20deleted\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20notFoundError.statusCode\x20=\x20404;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20notFoundError;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Soft-delete\x20tiap\x20row\x20aktif\x20(multi-row:\x20tiap\x20row\x20memakai\x20suffix\x20uuidv7\x20sendiri).\x0a\x20\x20\x20\x20\x20\x20const\x20deletedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20lockedRow\x20of\x20lockResult.rows)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20setClauses\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20p\x20=\x201;\x0a'+_0x5d6d88+_0x3f9227+_0x3da293(0x166)+IS_DELETED_COLUMN+_0x3da293(0x10d)+DELETED_AT_COLUMN+'\x20=\x20NOW()\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(\x27'+DELETED_BY_COLUMN+_0x3da293(0xe1)+_0x1d4c6b+_0x3da293(0x27c)+_0x1d4c6b+_0x3da293(0xcd);}function generateSoftDeleteCascadeOverride(_0x1fcc11){const _0x23e109=a0_0x25cec5,_0x30416e=_0x1fcc11[_0x23e109(0xc1)];return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Soft-delete\x20cascade\x20override\x20(R14\x20+\x20FK-SD-3).\x20/delete\x20men-soft-delete\x20master\x20+\x20seluruh\x0a\x20\x20\x20*\x20descendant\x20cascade\x20dalam\x20SATU\x20transaction\x20(atomic\x20all-or-nothing),\x20restrict-per-node\x20409\x20di\x0a\x20\x20\x20*\x20setiap\x20node.\x20Response\x20backward-compat\x20(master\x20depth-0).\x20updated_*\x20tidak\x20disentuh.\x0a\x20\x20\x20*\x20@param\x20{Object}\x20criteria\x20-\x20{\x20where:\x20[...]\x20}\x20mengikuti\x20format\x20/delete\x20existing\x0a\x20\x20\x20*\x20@param\x20{Object}\x20eventContext\x20-\x20Event\x20lifecycle\x20context\x20(opsional)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20{\x20success,\x20message,\x20deleted_count,\x20deleted_items\x20}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20deleteData(criteria,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0a\x0a\x20\x20\x20\x20if\x20(!criteria\x20||\x20!criteria.where)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20FK-SD-3\x20closure\x20cascade\x20(master\x20+\x20seluruh\x20descendant\x20lewat\x20edge\x20cascade\x20ke\x20anak\x0a\x20\x20\x20\x20//\x20soft-delete).\x20Map-free:\x20seluruh\x20metadata\x20descendant\x20dipersist\x20generate-time\x20di\x20RDF.\x0a\x20\x20\x20\x20const\x20__sdCascadeMeta\x20=\x20'+JSON[_0x23e109(0xb7)](_0x30416e)+_0x23e109(0x277)+DELETED_BY_COLUMN+'\x27);\x0a\x0a\x20\x20\x20\x20//\x20Kolom\x20minimum\x20untuk\x20memproses\x20sebuah\x20node:\x20pk\x20(identitas\x20visited-set/lock\x20+\x20WHERE\x20UPDATE)\x0a\x20\x20\x20\x20//\x20+\x20tiap\x20field\x20reusable\x20(baca\x20original\x20sebelum\x20mutasi)\x20+\x20parentColumn\x20tiap\x20anak\x20(nilai\x20untuk\x0a\x20\x20\x20\x20//\x20restrict-check\x20&\x20expand).\x20Dedup,\x20urutan\x20stabil.\x0a\x20\x20\x20\x20const\x20__sdSelectCols\x20=\x20(node)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20cols\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20seen\x20=\x20new\x20Set();\x0a\x20\x20\x20\x20\x20\x20const\x20add\x20=\x20(c)\x20=>\x20{\x20if\x20(c\x20&&\x20!seen.has(c))\x20{\x20seen.add(c);\x20cols.push(c);\x20}\x20};\x0a\x20\x20\x20\x20\x20\x20add(node.pk);\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20ru\x20of\x20node.reusable)\x20add(ru.field);\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20ch\x20of\x20node.children)\x20add(ch.parentColumn);\x0a\x20\x20\x20\x20\x20\x20return\x20cols.join(\x27,\x20\x27);\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Walk\x20cascade\x20rekursif\x20(worklist\x20DFS\x20+\x20visited-set\x20\x27table|pk\x27)\x20pada\x20SATU\x20client\x20→\x20atomic.\x0a\x20\x20\x20\x20//\x20Tiap\x20node:\x20(1)\x20restrict-per-node\x20409,\x20(2)\x20soft-delete\x20(mutasi\x20reusable\x20\x27##\x27+uuidv7\x20+\x0a\x20\x20\x20\x20//\x20is_deleted/deleted_at/deleted_by),\x20(3)\x20expand\x20anak\x20AKTIF\x20cascade.\x20Cycle/diamond\x20aman\x20lewat\x0a\x20\x20\x20\x20//\x20visited-set\x20+\x20filter\x20is_deleted=FALSE\x20saat\x20expand.\x20Hanya\x20baris\x20master\x20(depth-0,\x20isMaster)\x0a\x20\x20\x20\x20//\x20dikumpulkan\x20untuk\x20response\x20backward-compat.\x0a\x20\x20\x20\x20const\x20__cascadeSoftDelete\x20=\x20async\x20(client,\x20masterRows,\x20deletedBy)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20visited\x20=\x20new\x20Set();\x0a\x20\x20\x20\x20\x20\x20const\x20touched\x20=\x20new\x20Set();\x0a\x20\x20\x20\x20\x20\x20const\x20masterDeletedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20work\x20=\x20masterRows.map((r)\x20=>\x20({\x20table:\x20__sdCascadeMeta.master,\x20row:\x20r,\x20isMaster:\x20true\x20}));\x0a\x20\x20\x20\x20\x20\x20while\x20(work.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20current\x20=\x20work.pop();\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20node\x20=\x20__sdCascadeMeta.nodes[current.table];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20pkVal\x20=\x20current.row[node.pk];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20visitedKey\x20=\x20current.table\x20+\x20\x27|\x27\x20+\x20pkVal;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(visited.has(visitedKey))\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20visited.add(visitedKey);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(1)\x20restrict-per-node\x20—\x20generalisasi\x20FK-SD-2\x20Phase\x2003\x20ke\x20SETIAP\x20node.\x20Anak\x20soft-delete\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20\x20→\x20hanya\x20row\x20AKTIF\x20(is_deleted=FALSE)\x20memblokir;\x20anak\x20non-soft-delete\x20→\x20row\x20apa\x20pun.\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20ch\x20of\x20node.children)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ch.onDelete\x20!==\x20\x27restrict\x27)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__restrictVal\x20=\x20current.row[ch.parentColumn];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__restrictVal\x20===\x20null\x20||\x20__restrictVal\x20===\x20undefined)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__activeFilter\x20=\x20ch.childSoftDelete\x20?\x20\x27\x20AND\x20'+IS_DELETED_COLUMN+_0x23e109(0x1e5)+IS_DELETED_COLUMN+_0x23e109(0x10d)+DELETED_AT_COLUMN+_0x23e109(0x13e)+DELETED_BY_COLUMN+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(deletedBy);\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(pkVal);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Master\x20(depth-0)\x20di-UPDATE\x20ke\x20writeSource\x20(read/write\x20split-aware,\x20identik\x20jalur\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20existing)\x20+\x20RETURNING\x20untuk\x20response.\x20Descendant\x20ke\x20nama\x20tabel\x20closure\x20(qualified).\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__target\x20=\x20current.isMaster\x20?\x20writeSource\x20:\x20current.table;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__returning\x20=\x20current.isMaster\x20?\x20(\x27\x20RETURNING\x20\x27\x20+\x20returningFields)\x20:\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__updateResult\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27UPDATE\x20\x27\x20+\x20__target\x20+\x20\x27\x20SET\x20\x27\x20+\x20setClauses.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20node.pk\x20+\x20\x27\x20=\x20$\x27\x20+\x20p\x20+\x20__returning,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20touched.add(current.table);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(current.isMaster\x20&&\x20__updateResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20masterDeletedItems.push(__updateResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(3)\x20expand:\x20anak\x20AKTIF\x20(is_deleted=FALSE)\x20lewat\x20edge\x20cascade\x20ke\x20anak\x20soft-delete,\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20\x20FOR\x20UPDATE\x20(kunci\x20sebelum\x20mutasi),\x20skip\x20parentColumn\x20NULL.\x20Enqueue\x20tiap\x20row.\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20ch\x20of\x20node.children)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ch.onDelete\x20!==\x20\x27cascade\x27\x20||\x20ch.childSoftDelete\x20!==\x20true)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__expandVal\x20=\x20current.row[ch.parentColumn];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__expandVal\x20===\x20null\x20||\x20__expandVal\x20===\x20undefined)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__childNode\x20=\x20__sdCascadeMeta.nodes[ch.childTable];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20ORDER\x20BY\x20<childPk>\x20sebelum\x20FOR\x20UPDATE\x20→\x20urutan\x20akuisisi\x20lock\x20deterministik\x20(mitigasi\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20ringan\x20konkurensi;\x20deadlock\x20penuh\x20=\x20Phase\x2004d).\x20Hanya\x20mengubah\x20URUTAN\x20baris,\x20bukan\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20himpunan\x20hasil\x20→\x20hasil\x20cascade\x20identik.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__childRows\x20=\x20(await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20\x27\x20+\x20__sdSelectCols(__childNode)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20ch.childTable\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20ch.childColumn\x20+\x20\x27\x20=\x20$1\x20AND\x20'+IS_DELETED_COLUMN+_0x23e109(0x21f)+IS_DELETED_COLUMN+_0x23e109(0x19a);}function generateDeleteMethod(_0x1fe9fc){const _0x368fa6=a0_0x25cec5,_0x512909={'KWbeK':function(_0x554174,_0x4bdac0){return _0x554174(_0x4bdac0);}},_0x18d59f=_0x1fe9fc['action']||{},_0x1b6beb=_0x1fe9fc['masterDetail']&&_0x1fe9fc['masterDetail']['enabled'],_0x416cea=_0x1fe9fc[_0x368fa6(0x149)]?.['cascadeDelete']||![];if(!_0x18d59f[_0x368fa6(0x26b)])return'';const _0x62ce62=_0x1fe9fc['primaryKey']||'id';if(_0x512909['KWbeK'](isSoftDeleteEnabled,_0x1fe9fc))return generateSoftDeleteOverride(_0x1fe9fc);if(!_0x1b6beb)return'';const _0x5cd9b0=_0x1fe9fc[_0x368fa6(0x149)][_0x368fa6(0xb6)],_0x502e22=_0x1fe9fc['masterDetail'][_0x368fa6(0xfc)];let _0x415b03='\x0a';return _0x415b03+=_0x368fa6(0x195)+(_0x416cea?_0x368fa6(0x1f5)+_0x5cd9b0+'...\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Get\x20primary\x20key\x20value\x20untuk\x20delete\x20child\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20`SELECT\x20'+_0x62ce62+_0x368fa6(0x242)+_0x62ce62+_0x368fa6(0x254)+_0x5cd9b0+'\x20WHERE\x20'+_0x502e22+_0x368fa6(0x164)+_0x5cd9b0+_0x368fa6(0x1aa):_0x368fa6(0x278))+_0x368fa6(0xc9)+(_0x416cea?_0x368fa6(0x16e):'')+'\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20deleteData:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a',_0x415b03;}function generateSoftDeleteRestoreOverride(_0x1e2d63){const _0x3b12f1=a0_0x25cec5,_0x39288c={'KlVrW':_0x3b12f1(0x273)},_0x3b6cb4=_0x1e2d63['primaryKey']||_0x1e2d63[_0x3b12f1(0x146)]&&_0x1e2d63['fieldName'][0x0]||'id',_0x2191b3=_0x1e2d63['softDelete']&&Array['isArray'](_0x1e2d63['softDelete']['reusable'])?_0x1e2d63['softDelete'][_0x3b12f1(0x1e9)]:[],_0x116b61=Array[_0x3b12f1(0x294)](_0x1e2d63['softDeleteFkChecks'])?_0x1e2d63[_0x3b12f1(0x176)]['filter'](_0x28e4c2=>_0x28e4c2&&Array[_0x3b12f1(0x294)](_0x28e4c2[_0x3b12f1(0x108)])&&_0x28e4c2[_0x3b12f1(0x108)][_0x3b12f1(0x25c)]>0x0&&typeof _0x28e4c2['refTable']===_0x3b12f1(0x241)&&_0x28e4c2[_0x3b12f1(0x27e)]&&Array[_0x3b12f1(0x294)](_0x28e4c2['refColumns'])&&_0x28e4c2[_0x3b12f1(0x1a6)]['length']===_0x28e4c2['columns'][_0x3b12f1(0x25c)]):[],_0x34b764=[_0x3b6cb4];for(const _0x455659 of _0x2191b3){if(_0x455659&&_0x455659['field']&&!_0x34b764[_0x3b12f1(0x289)](_0x455659['field']))_0x34b764['push'](_0x455659[_0x3b12f1(0x170)]);}for(const _0x4e3fb9 of _0x116b61){for(const _0x5b98b8 of _0x4e3fb9[_0x3b12f1(0x108)]){if(_0x5b98b8&&!_0x34b764['includes'](_0x5b98b8))_0x34b764[_0x3b12f1(0x1c6)](_0x5b98b8);}}const _0x4ecd5a=_0x34b764[_0x3b12f1(0x117)](',\x20'),_0x23b152=_0x2191b3[_0x3b12f1(0x12a)](_0x5854ac=>{const _0x104a69=_0x3b12f1,_0xefe2d6=_0x5854ac['field'],_0x12529e=_0x5854ac['length'];return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20reusable\x20\x27'+_0xefe2d6+_0x104a69(0x24c)+_0x12529e+'):\x20strip\x20suffix\x20\x27##\x27\x20+\x20konflik\x20409\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__cur\x20=\x20lockedRow[\x27'+_0xefe2d6+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__cur\x20!==\x20null\x20&&\x20__cur\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__curStr\x20=\x20String(__cur);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__sepIdx\x20=\x20__curStr.lastIndexOf(\x27##\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Legacy\x20tanpa\x20\x27##\x27\x20→\x20original\x20=\x20nilai\x20apa\x20adanya\x20(strip\x20dilewati\x20di\x20bawah).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__original\x20=\x20__sepIdx\x20>=\x200\x20?\x20__curStr.substring(0,\x20__sepIdx)\x20:\x20__curStr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Konflik\x20(409):\x20original\x20kini\x20dipakai\x20record\x20aktif\x20lain\x20selain\x20row\x20ini.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__conflict\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x201\x20FROM\x20\x27\x20+\x20writeSource\x20+\x20\x27\x20WHERE\x20'+_0xefe2d6+_0x104a69(0xfb)+IS_DELETED_COLUMN+_0x104a69(0x1eb)+_0x3b6cb4+_0x104a69(0xcb)+_0x3b6cb4+'\x27]]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__conflict.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20conflictError\x20=\x20new\x20Error(\x22Cannot\x20restore:\x20\x27'+_0xefe2d6+_0x104a69(0x165)+_0xefe2d6+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(__original);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x3b12f1(0x117)](''),_0x22421a=_0x116b61[_0x3b12f1(0x12a)]((_0x2590c9,_0x5c4335)=>{const _0x1d3e87=_0x3b12f1,_0x3ff097=_0x2590c9['parentSoftDelete']===!![],_0x26b001=_0x2590c9['refTable'],_0x15d625=_0x2590c9['columns']['map'](_0x5444ee=>'lockedRow[\x27'+_0x5444ee+'\x27]')[_0x1d3e87(0x117)](',\x20'),_0xa50f2a=_0x2590c9[_0x1d3e87(0x1a6)]['map']((_0x3cd982,_0x2727ae)=>_0x3cd982+'\x20=\x20$'+(_0x2727ae+0x1))['join'](_0x1d3e87(0x25a)),_0x51ae54=_0x3ff097?'\x20AND\x20'+IS_DELETED_COLUMN+'\x20=\x20FALSE':'',_0x52d7be=_0x3ff097?_0x39288c['KlVrW']:'missing';return _0x1d3e87(0x1e3)+_0x5c4335+_0x1d3e87(0x17d)+_0x26b001+_0x1d3e87(0x181)+_0x3ff097+'):\x20parent\x20wajib\x20'+(_0x3ff097?'aktif':_0x1d3e87(0x1ab))+'\x20(422)\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__fkVals\x20=\x20['+_0x15d625+_0x1d3e87(0x233)+_0x26b001+'\x20WHERE\x20'+_0xa50f2a+_0x51ae54+'\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20__fkVals\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__fkCheck.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fkError\x20=\x20new\x20Error(\x22Cannot\x20restore:\x20referenced\x20parent\x20record\x20in\x20\x27'+_0x26b001+_0x1d3e87(0x269)+_0x52d7be+'\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fkError.statusCode\x20=\x20422;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20fkError;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x3b12f1(0x117)]('');return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Soft-delete\x20restore\x20override\x20(R20).\x20/restore\x20membalik\x20soft\x20delete\x20secara\x20atomic.\x0a\x20\x20\x20*\x20Atomic\x20(satu\x20transaction):\x20SELECT\x20FOR\x20UPDATE\x20row\x20terhapus\x20(is_deleted=TRUE)\x20→\x20strip\x20suffix\x0a\x20\x20\x20*\x20reusable\x20+\x20konflik\x20409\x20+\x20FK\x20422\x20→\x20UPDATE\x20reset\x20is_deleted/deleted_at/deleted_by\x20→\x20COMMIT\x20→\x0a\x20\x20\x20*\x20invalidateCache.\x20updated_*\x20tidak\x20disentuh.\x0a\x20\x20\x20*\x20@param\x20{Object}\x20criteria\x20-\x20{\x20where:\x20[...]\x20}\x20mengikuti\x20format\x20/delete\x20existing\x0a\x20\x20\x20*\x20@param\x20{Object}\x20eventContext\x20-\x20Event\x20lifecycle\x20context\x20(opsional)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20{\x20success,\x20message,\x20restored_count,\x20restored_items\x20}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20restoreData(criteria,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20if\x20(!criteria\x20||\x20!criteria.where)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20writeSource\x20=\x20this.getTableSource(\x27write\x27);\x0a\x20\x20\x20\x20const\x20returningFields\x20=\x20this.getReturningFields();\x0a\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Kunci\x20row\x20terhapus\x20yang\x20cocok\x20kriteria.\x20Filter\x20is_deleted\x20=\x20TRUE\x20memastikan\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20hanya\x20record\x20yang\x20benar-benar\x20ter-soft-delete\x20yang\x20dipulihkan;\x20FOR\x20UPDATE\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20menjamin\x20satu\x20pemenang\x20saat\x20restore\x20bersamaan.\x0a\x20\x20\x20\x20\x20\x20const\x20selectParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20whereBuilt\x20=\x20this.buildComplexWhereClause(criteria.where,\x20selectParams,\x201);\x0a\x20\x20\x20\x20\x20\x20const\x20lockQuery\x20=\x20\x27SELECT\x20'+_0x4ecd5a+_0x3b12f1(0x267)+IS_DELETED_COLUMN+'\x20=\x20TRUE\x20FOR\x20UPDATE\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20lockResult\x20=\x20await\x20client.query(lockQuery,\x20whereBuilt.params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(lockResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tidak\x20ada\x20row\x20terhapus:\x20tidak\x20ditemukan,\x20atau\x20record\x20aktif\x20(bukan\x20terhapus).\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20notFoundError\x20=\x20new\x20Error(\x27Record\x20not\x20found\x20or\x20not\x20deleted\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20notFoundError.statusCode\x20=\x20404;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20notFoundError;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Restore\x20tiap\x20row\x20terhapus\x20(strip\x20suffix\x20→\x20konflik\x20→\x20FK\x20→\x20reset).\x0a\x20\x20\x20\x20\x20\x20const\x20restoredItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20lockedRow\x20of\x20lockResult.rows)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20setClauses\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20p\x20=\x201;\x0a'+_0x23b152+_0x22421a+_0x3b12f1(0xc0)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(\x27'+DELETED_AT_COLUMN+_0x3b12f1(0x296)+DELETED_BY_COLUMN+'\x20=\x20NULL\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(lockedRow[\x27'+_0x3b6cb4+'\x27]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateQuery\x20=\x20\x27UPDATE\x20\x27\x20+\x20writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20setClauses.join(\x27,\x20\x27)\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27\x20WHERE\x20'+_0x3b6cb4+'\x20=\x20$\x27\x20+\x20p\x20+\x20\x27\x20RETURNING\x20\x27\x20+\x20returningFields;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateResult\x20=\x20await\x20client.query(updateQuery,\x20updateParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(updateResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20restoredItems.push(updateResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Invalidate\x20cache\x20setelah\x20COMMIT\x20(jalur\x20custom\x20wajib\x20eksplisit,\x20sama\x20seperti\x20R14).\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Successfully\x20restored\x20\x27\x20+\x20restoredItems.length\x20+\x20\x27\x20record(s)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20restored_count:\x20restoredItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20restored_items:\x20restoredItems\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}function generateRestoreMethod(_0x420bc7){const _0x3b1f0a=a0_0x25cec5,_0x349f66=_0x420bc7[_0x3b1f0a(0xbd)]||{};if(!_0x349f66['restore']||!isSoftDeleteEnabled(_0x420bc7))return'';return generateSoftDeleteRestoreOverride(_0x420bc7);}function hasSoftDeleteFkParents(_0x1b8db2){const _0x58545e=a0_0x25cec5;return Array['isArray'](_0x1b8db2[_0x58545e(0x163)])&&_0x1b8db2[_0x58545e(0x163)][_0x58545e(0x25c)]>0x0;}function generateSoftDeleteFkParentsCheck(_0x3bd72e){const _0x46912f=a0_0x25cec5;if(!hasSoftDeleteFkParents(_0x3bd72e))return'';const _0x166713=_0x3bd72e['softDeleteFkParents'][_0x46912f(0x12a)]((_0x5de4b0,_0x3ac82c)=>{const _0x56e687=_0x46912f,_0x2e192e=_0x5de4b0[_0x56e687(0x108)][0x0],_0x58a69a=_0x5de4b0[_0x56e687(0x27e)],_0x40be20=_0x5de4b0[_0x56e687(0x1a6)][0x0];return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK\x20#'+_0x3ac82c+'\x20\x27'+_0x2e192e+_0x56e687(0x18a)+_0x58a69a+'.'+_0x40be20+_0x56e687(0x261)+_0x2e192e+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Pemicu\x20=\x20kolom\x20FK\x20hadir\x20non-null;\x20null/undefined\x20→\x20skip\x20(FK\x20nullable,\x20tak\x20ada\x20parent).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__fkVal\x20!==\x20null\x20&&\x20__fkVal\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__fkRes\x20=\x20await\x20pool.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x201\x20FROM\x20'+_0x58a69a+'\x20WHERE\x20'+_0x40be20+_0x56e687(0xfb)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__fkVal]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__fkRes.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__fkErr\x20=\x20new\x20Error(\x22Cannot\x20\x22\x20+\x20operation\x20+\x20\x22:\x20referenced\x20parent\x20record\x20in\x20\x27'+_0x58a69a+'\x27\x20is\x20missing\x20or\x20soft-deleted\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20__fkErr.statusCode\x20=\x20422;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20__fkErr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})['join']('');return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20FK-SD-1\x20forward\x20block.\x20Tolak\x20create/update\x20anak\x20yang\x20menunjuk\x20parent\x20soft-delete\x20yang\x0a\x20\x20\x20*\x20terhapus\x20(is_deleted=TRUE)\x20atau\x20tidak\x20ada\x20(422).\x20Hanya\x20FK\x20ber-parent\x20soft-delete-enabled\x0a\x20\x20\x20*\x20(registry\x20softDeleteFkParents)\x20yang\x20dicek;\x20FK\x20null/absent\x20→\x20skip.\x20Dipanggil\x20route\x20/create\x0a\x20\x20\x20*\x20dan\x20/update\x20sebelum\x20addData/updateData.\x20Pre-check\x20pool\x20terpisah\x20(non-transaksional):\x20lihat\x0a\x20\x20\x20*\x20catatan\x20atomicity\x20Bagian\x20B\x20di\x20report\x20Phase\x2002.\x0a\x20\x20\x20*\x20@param\x20{Object}\x20body\x20-\x20request\x20body\x20(req.body)\x0a\x20\x20\x20*\x20@param\x20{string}\x20operation\x20-\x20\x27create\x27\x20|\x20\x27update\x27\x20(untuk\x20pesan\x20error\x20422)\x0a\x20\x20\x20*/\x0a\x20\x20async\x20checkSoftDeleteFkParents(body,\x20operation)\x20{\x0a\x20\x20\x20\x20if\x20(!body\x20||\x20typeof\x20body\x20!==\x20\x27object\x27)\x20return;\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a'+_0x166713+'\x0a\x20\x20}\x0a';}function createPostgresModelTemplate(_0x3570c1,_0x2eeb35,_0x452664){const _0x44b3f9=a0_0x25cec5,_0x5be02d={'BybyS':function(_0x5a0071,_0x37ef27){return _0x5a0071(_0x37ef27);},'brhWm':function(_0x4576c9,_0x534f3){return _0x4576c9+_0x534f3;},'Icapn':function(_0x5ee075,_0x3819c5){return _0x5ee075+_0x3819c5;},'LvLQb':'\x20WHERE\x20','KdDFS':_0x44b3f9(0xb8),'XlfNM':function(_0x4021b8,_0x622eed,_0x540eed){return _0x4021b8(_0x622eed,_0x540eed);},'SzJkL':_0x44b3f9(0x266),'tKkFk':function(_0x2dcacd,_0x50a5a4){return _0x2dcacd(_0x50a5a4);},'uEvwB':_0x44b3f9(0x275),'sevns':function(_0x331181,_0x3b7e50,_0x88b436){return _0x331181(_0x3b7e50,_0x88b436);},'zDKsz':_0x44b3f9(0x15d),'zNWbw':function(_0x3e6a62){return _0x3e6a62();},'nHPsr':function(_0x19b5ee,_0x3e6380){return _0x19b5ee(_0x3e6380);}};_0x5be02d[_0x44b3f9(0x26f)](assertNoFileReferenceLeftover,_0x452664);const _0x450efc=FileUtils['toPascalCase'](_0x2eeb35),_0x97191b=new Date()[_0x44b3f9(0x1c7)]()['replace']('T','\x20')[_0x44b3f9(0x20d)](/\.\d{3}Z$/,''),_0x3c1e06=_0x5be02d['BybyS'](buildValidFieldsString,_0x452664),_0x5c4736=buildSearchColumnsCode(_0x452664),_0x2e120d=buildFiltersCode(_0x452664),_0x238ab3=buildLookupOverrideCode(_0x2eeb35,_0x452664),_0x56b5f0=_0x5be02d[_0x44b3f9(0x26f)](buildAdvancedQuerySection,_0x452664),_0x260be9=buildFieldMappingCode(_0x452664),_0x1245df=_0x5be02d['XlfNM'](buildAuditColumnsSection,_0x452664,_0x5be02d[_0x44b3f9(0x212)]),_0x179980=_0x5be02d[_0x44b3f9(0x298)](buildFormatResponseDataBody,_0x452664),_0x4d88a4=_0x5be02d[_0x44b3f9(0x26f)](isSoftDeleteEnabled,_0x452664)?'(data\x20||\x20[]).map(__row\x20=>\x20{\x20const\x20__r\x20=\x20{\x20...__row\x20};\x20for\x20(const\x20__sdCol\x20of\x20'+JSON['stringify'](SOFT_DELETE_COLUMNS)+')\x20delete\x20__r[__sdCol];\x20return\x20__r;\x20})':'data\x20||\x20[]',_0x407331=_0x452664[_0x44b3f9(0x13d)]&&_0x452664[_0x44b3f9(0x13d)][_0x44b3f9(0x1f6)]?_0x5be02d['XlfNM'](buildDefaultScopeSQL,_0x452664['defaultScope'][_0x44b3f9(0x1f6)],''):'',_0x40df68=((()=>{const _0x162c98=_0x44b3f9,_0x4cab9c=_0x5be02d['BybyS'](softDeleteVisibilityFilter,_0x452664);return _0x4cab9c!==null?_0x5be02d[_0x162c98(0x227)](_0x5be02d[_0x162c98(0x17f)](_0x5be02d[_0x162c98(0x17f)](_0x5be02d['LvLQb'],IS_DELETED_COLUMN),_0x5be02d['KdDFS']),_0x4cab9c):'';})()),_0x551f21=_0x452664[_0x44b3f9(0x1c5)]||_0x452664[_0x44b3f9(0x152)],_0x5c09af=_0x452664['tableName'];return'const\x20BaseModel\x20=\x20require(\x27@restforgejs/platform/src/models/base-model\x27);\x0aconst\x20db\x20=\x20require(\x27@restforgejs/platform/src/utils/db\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0a//\x20AdvancedFilterHelper\x20dihapus\x20—\x20semua\x20filtering\x20ditangani\x20oleh\x20buildObjectFilterClause\x20dan\x20buildComplexWhereClause\x0a\x0a/**\x0a\x20*\x20'+_0x450efc+'\x20Model\x20-\x20Auto-generated\x20on\x20'+_0x97191b+_0x44b3f9(0x29b)+_0x2eeb35+_0x44b3f9(0x184)+_0x452664['tableName']+(_0x452664[_0x44b3f9(0x1c5)]?'\x0a\x20*\x20View:\x20'+_0x452664[_0x44b3f9(0x1c5)]:'')+_0x44b3f9(0x1b8)+(_0x452664[_0x44b3f9(0x146)]?_0x452664[_0x44b3f9(0x146)]['length']:0x0)+_0x44b3f9(0xe2)+_0x450efc+'Model\x20extends\x20BaseModel\x20{\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Constructor\x0a\x20\x20\x20*/\x0a\x20\x20constructor()\x20{\x0a\x20\x20\x20\x20//\x20Definisikan\x20validFields\x20-\x20semua\x20field\x20yang\x20valid\x20untuk\x20tabel\x20'+_0x2eeb35+_0x44b3f9(0x1ed)+_0x3c1e06+_0x44b3f9(0x1d9)+(_0x452664['datatablesWhere']?JSON['stringify'](_0x452664[_0x44b3f9(0x118)]):_0x44b3f9(0x140))+';\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20constructor\x20parent\x20dengan\x20nama\x20tabel,\x20validFields,\x20dan\x20datatablesWhere\x0a\x20\x20\x20\x20super(\x27'+_0x452664[_0x44b3f9(0x152)]+'\x27,\x20validFields,\x20datatablesWhere);\x0a\x0a\x20\x20\x20\x20//\x20Setup\x20primary\x20key\x20dari\x20payload\x20atau\x20fallback\x20ke\x20fieldName\x20pertama\x0a\x20\x20\x20\x20this.primaryKey\x20=\x20\x27'+(_0x452664['primaryKey']||_0x452664['fieldName']&&_0x452664['fieldName'][0x0]||'id')+_0x44b3f9(0xf6)+_0x551f21+_0x44b3f9(0x28e)+_0x551f21+'\x27;\x20//\x20Source\x20untuk\x20operasi\x20read\x20(get,\x20list,\x20lookup,\x20datatables)\x0a\x20\x20\x20\x20this.writeSource\x20=\x20\x27'+_0x5c09af+_0x44b3f9(0x224)+_0x1245df+_0x44b3f9(0x283)+!!_0x452664['viewQuery']+';\x0a\x20\x20\x20\x20this.hasExportQuery\x20=\x20'+!!_0x452664['exportQuery']+_0x44b3f9(0x18f)+(_0x452664[_0x44b3f9(0x131)]&&Object['keys'](_0x452664['dateTimeFields'])[_0x44b3f9(0x25c)]>0x0?'\x0a\x20\x20\x20\x20//\x20DateTime\x20fields\x20configuration\x0a\x20\x20\x20\x20this.dateTimeFields\x20=\x20'+JSON[_0x44b3f9(0xb7)](_0x452664[_0x44b3f9(0x131)],null,0x6)+';\x0a\x20\x20\x20\x20':'')+(_0x452664['uploadConfig']&&_0x452664[_0x44b3f9(0x1c2)][_0x44b3f9(0x196)]?_0x44b3f9(0x1e4)+JSON['stringify'](Object['keys'](_0x452664[_0x44b3f9(0x1c2)][_0x44b3f9(0x196)]))+';\x0a\x20\x20\x20\x20':'')+'\x0a'+_generateValidationConfig(_0x452664[_0x44b3f9(0x105)])+'\x0a\x20\x20\x20\x20//\x20Model\x20metadata\x0a\x20\x20\x20\x20this.modelMetadata\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20endpointName:\x20\x27'+_0x2eeb35+_0x44b3f9(0x127)+_0x3570c1+'\x27,\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x452664[_0x44b3f9(0x152)]+_0x44b3f9(0xeb)+_0x551f21+_0x44b3f9(0xf0)+(_0x452664[_0x44b3f9(0x146)]?_0x452664[_0x44b3f9(0x146)][_0x44b3f9(0x25c)]:0x0)+_0x44b3f9(0x281)+_0x97191b+_0x44b3f9(0x16d)+JSON['stringify'](_0x452664[_0x44b3f9(0x21c)]?.['features']||[])+'\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Load\x20advanced\x20query\x20templates\x20dari\x20file\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Templates\x20SQL\x20untuk\x20advanced\x20queries\x0a\x20\x20\x20*/\x0a\x20\x20loadAdvancedQueryTemplates()\x20{\x0a\x20\x20\x20\x20const\x20templates\x20=\x20{};\x0a\x20\x20\x20\x20'+_0x56b5f0+_0x44b3f9(0x18c)+_0x2eeb35+'\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20'+_0x2eeb35+'\x0a\x20\x20\x20*/\x0a\x20\x20getListQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Load\x20query\x20dasar\x20dengan\x20placeholder\x20replacement\x0a\x20\x20\x20\x20'+buildQueryLoadingCode(_0x452664['datatablesQuery'],_0x5be02d[_0x44b3f9(0x154)])+'\x0a\x0a\x20\x20\x20\x20//\x20Replace\x20any\x20remaining\x20placeholders\x20-\x20gunakan\x20readSource\x20untuk\x20operasi\x20read\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${tableName}/g,\x20this.readSource);\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${this.table}/g,\x20this.readSource);\x0a\x0a\x20\x20\x20\x20return\x20baseQuery;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20->\x20viewQuery\x20->\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20/read\x0a\x20\x20\x20*/\x0a\x20\x20getReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Priority\x201:\x20viewName\x20(real\x20database\x20view)\x0a\x20\x20\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20\x20\x20}\x0a'+(_0x452664[_0x44b3f9(0x1f8)]?'\x20\x20\x20\x20//\x20Priority\x202:\x20viewQuery\x20(virtual\x20view\x20dari\x20payload)\x0a\x20\x20\x20\x20'+_0x5be02d['sevns'](buildQueryLoadingCode,_0x452664['viewQuery'],'viewQuery')+'\x0a\x0a\x20\x20\x20\x20//\x20Replace\x20any\x20remaining\x20placeholders\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/\x5c$\x5c{tableName\x5c}/g,\x20this.readSource);\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/\x5c$\x5c{this\x5c.table\x5c}/g,\x20this.readSource);\x0a\x0a\x20\x20\x20\x20return\x20baseQuery;':_0x44b3f9(0x201))+'\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getDatatables\x20untuk\x20mendukung\x20filter\x20object\x20format\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Parameter\x20dari\x20request\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Hasil\x20query\x20dengan\x20format\x20DataTables\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getDatatables(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20cache\x20first\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedDatatables(options);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20\x20\x20start\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20filters\x20=\x20{},\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20null\x0a\x20\x20\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Resolve\x20sort\x20columns\x20dengan\x20prioritas:\x20sort_columns\x20>\x20order[0][column]\x20>\x20default\x0a\x20\x20\x20\x20\x20\x20let\x20resolvedSortColumns\x20=\x20sort_columns;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20cek\x20format\x20DataTables\x20bawaan\x20(order[0][column]\x20dan\x20order[0][dir])\x0a\x20\x20\x20\x20\x20\x20if\x20((!resolvedSortColumns\x20||\x20resolvedSortColumns.length\x20===\x200)\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20!==\x20undefined\x20&&\x20options[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20columnIndex\x20=\x20parseInt(options[\x27order[0][column]\x27]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20direction\x20=\x20options[\x27order[0][dir]\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(columnIndex\x20>=\x200\x20&&\x20columnIndex\x20<\x20this.validFields.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resolvedSortColumns\x20=\x20[{\x20column:\x20this.validFields[columnIndex],\x20direction:\x20direction.toUpperCase()\x20}];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20\x20\x20const\x20baseQuery\x20=\x20this.getListQuery(options);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Membuat\x20where\x20clause\x20berdasarkan\x20search\x20dan\x20filter\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20this.buildWhereClause(searchValue,\x20searchBy);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Tambahkan\x20filter\x20object\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20filterClause\x20=\x20this.buildObjectFilterClause(filters);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(filterClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20\x27\x20+\x20filterClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20filterClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20\x20\x20let\x20whereParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(where\x20&&\x20(Array.isArray(where)\x20||\x20(where.conditions\x20&&\x20Array.isArray(where.conditions))))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20(\x27\x20+\x20whereResult.sql\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20whereResult.sql;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20query\x20needs\x20subquery\x20wrapping\x20(CTE\x20or\x20JOIN)\x0a\x20\x20\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Menghitung\x20total\x20data\x20keseluruhan\x20-\x20gunakan\x20readSource\x20untuk\x20read\x20operations\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query'+_0x40df68+'\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource'+(_0x40df68?'\x20+\x20\x27'+_0x40df68+'\x27':'')+';\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20-\x20gunakan\x20readSource\x20untuk\x20read\x20operations\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Always\x20wrap\x20CTE/JOIN\x20query\x20for\x20counting\x20with\x20filters\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Query:\x27,\x20countFilteredQuery);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Membuat\x20order\x20clause\x20menggunakan\x20buildSortColumnsClause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(resolvedSortColumns);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Menambahkan\x20pagination\x0a\x20\x20\x20\x20\x20\x20const\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${start}`;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20-\x20wrap\x20CTE/JOIN\x20query\x20to\x20avoid\x20column\x20ambiguity\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20(whereClause\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20limitClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20+\x20\x22\x20\x22\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20draw:\x20parseInt(options.draw\x20||\x20\x271\x27,\x2010),\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsTotal:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsFiltered:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20data\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedDatatables(options,\x20result);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getDatatables:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Get\x20data\x20list\x20dengan\x20manual\x20pagination\x20untuk\x20endpoint\x20/list\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Parameter\x20dari\x20request\x20list\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Hasil\x20query\x20dengan\x20format\x20list\x20pagination\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getList(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20page\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20\x20\x20offset\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27code\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20select\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20limit\x20=\x201000\x0a\x20\x20\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20paginate\x20=\x20page\x20!==\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Check\x20if\x20data\x20exists\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20const\x20scInfo\x20=\x20sort_columns\x20&&\x20sort_columns.length\x20>\x200\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20sort_columns.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20cacheInfo\x20=\x20`page:${page},\x20perPage:${perPage},\x20sort:${scInfo},\x20search:${searchValue\x20||\x20\x27none\x27}${where\x20?\x20\x27,\x20where:yes\x27\x20:\x20\x27\x27}`;\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedList(options);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20HIT\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20MISS\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20\x20\x20let\x20baseQuery;\x0a\x20\x20\x20\x20\x20\x20if\x20(select\x20&&\x20Array.isArray(select)\x20&&\x20select.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20selectedValidColumns\x20=\x20select.filter(col\x20=>\x20this.validFields.includes(col));\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(selectedValidColumns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20\x27\x20+\x20selectedValidColumns.join(\x27,\x20\x27)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201b.\x20Deteksi\x20apakah\x20query\x20mengandung\x20JOIN\x20atau\x20CTE\x20(perlu\x20subquery\x20wrapping)\x0a\x20\x20\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Build\x20WHERE\x20clause\x20untuk\x20search\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20`'+(_0x407331?'WHERE\x20'+_0x407331:'')+_0x44b3f9(0xea)+(_0x407331?_0x44b3f9(0x213):'whereClause\x20=\x20`WHERE\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;')+_0x44b3f9(0x185)+_0x40df68+'\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource'+(_0x40df68?_0x5be02d['Icapn'](_0x5be02d['zDKsz']+_0x40df68,'\x27'):'')+';\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20(jika\x20ada\x20where/search)\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Build\x20ORDER\x20BY\x20clause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(sort_columns);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Build\x20LIMIT\x20dan\x20OFFSET\x20clause\x20(kondisional\x20berdasarkan\x20mode)\x0a\x20\x20\x20\x20\x20\x20let\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${offset}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${limit}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20untuk\x20data\x20(subquery\x20wrapping\x20untuk\x20JOIN/CTE)\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(`List\x20SQL\x20Query:\x20${query}`);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27List\x20Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20'+_0x4d88a4+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalRecords:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalUnfiltered:\x20totalRecords\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.page\x20=\x20page;\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.perPage\x20=\x20perPage;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Store\x20result\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedList(options,\x20result);\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20SET\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getList:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Membangun\x20WHERE\x20clause\x20dari\x20filter\x20object\x0a\x20\x20\x20*\x20@param\x20{Object}\x20filters\x20-\x20Object\x20filter\x20dengan\x20format\x20{column:\x20value}\x0a\x20\x20\x20*\x20@returns\x20{string}\x20WHERE\x20clause\x20SQL\x20atau\x20empty\x20string\x0a\x20\x20\x20*/\x0a\x20\x20buildObjectFilterClause(filters)\x20{\x0a\x20\x20\x20\x20if\x20(!filters\x20||\x20typeof\x20filters\x20!==\x20\x27object\x27\x20||\x20Object.keys(filters).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20[];\x0a\x0a\x20\x20\x20\x20for\x20(const\x20[column,\x20value]\x20of\x20Object.entries(filters))\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20kolom\x20harus\x20ada\x20dalam\x20validFields\x0a\x20\x20\x20\x20\x20\x20if\x20(this.validFields.includes(column)\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined\x20&&\x20value\x20!==\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Escape\x20value\x20untuk\x20mencegah\x20SQL\x20injection\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20value.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20\x27${escapedValue}\x27`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20conditions.length\x20>\x200\x20?\x20conditions.join(\x27\x20AND\x20\x27)\x20:\x20\x27\x27;\x0a\x20\x20}\x0a\x0a'+_0x5c4736+'\x0a\x0a'+_0x2e120d+'\x0a\x0a'+_0x238ab3+'\x0a\x0a'+_0x260be9+_0x44b3f9(0x297)+_0x2eeb35+_0x44b3f9(0x1a7)+_0x2eeb35+_0x44b3f9(0x1a5)+_0x179980+_0x44b3f9(0xd6)+_0x5be02d[_0x44b3f9(0x1d4)](_generateValidateFieldConstraints)+'\x0a\x20\x20'+_0x5be02d[_0x44b3f9(0x26f)](generateCompositeMethods,_0x452664)+_0x5be02d['nHPsr'](generateDeleteMethod,_0x452664)+generateRestoreMethod(_0x452664)+generateSoftDeleteFkParentsCheck(_0x452664)+'\x0a}\x0a\x0a//\x20Export\x20singleton\x20instance\x0amodule.exports\x20=\x20new\x20'+_0x450efc+'Model();';}function getEnabledActions(_0x5156fd){const _0x45a27a=a0_0x25cec5,_0x11455f={'NgphY':function(_0x5d97b6,_0x44e040){return _0x5d97b6!==_0x44e040;},'CFxch':'object'};if(!_0x5156fd[_0x45a27a(0xbd)]||_0x11455f[_0x45a27a(0x19d)](typeof _0x5156fd[_0x45a27a(0xbd)],_0x11455f['CFxch']))return[];return Object[_0x45a27a(0x1c3)](_0x5156fd[_0x45a27a(0xbd)])['filter'](([,_0x4bda9f])=>_0x4bda9f)[_0x45a27a(0x12a)](([_0x12d3cf])=>_0x12d3cf);}function buildEndpointFunctions(_0x4947a7,_0x5295b1,_0x51472d,_0x3880a6,_0x47e743,_0x187cd0=null,_0x1015e5=![]){const _0x2b2e2e=a0_0x25cec5,_0x14d833={'gDRkz':function(_0x48a787,_0x486bba,_0x130a35,_0x48fad2,_0x3cf325){return _0x48a787(_0x486bba,_0x130a35,_0x48fad2,_0x3cf325);},'wuogr':function(_0x373280,_0x4fefa4,_0x51fee2,_0x40bd7d,_0xed5ea5,_0x14e576){return _0x373280(_0x4fefa4,_0x51fee2,_0x40bd7d,_0xed5ea5,_0x14e576);},'dapRV':function(_0x100cab,_0x2135ba,_0x44471e,_0x4c58b7,_0x28bff4){return _0x100cab(_0x2135ba,_0x44471e,_0x4c58b7,_0x28bff4);},'RITLU':function(_0x142704,_0x1cd677,_0x1be17f,_0x204a46,_0x4925a8){return _0x142704(_0x1cd677,_0x1be17f,_0x204a46,_0x4925a8);},'cYHCu':function(_0x4948aa,_0x4ef9d1,_0x5c65df,_0x86ab9d,_0x3185a9,_0x569d82){return _0x4948aa(_0x4ef9d1,_0x5c65df,_0x86ab9d,_0x3185a9,_0x569d82);},'WwTcO':function(_0x57bf14,_0x4e8643){return _0x57bf14(_0x4e8643);},'gYOYk':function(_0x3eb227,_0x3311b0,_0x26b38c,_0x263775,_0x2347b6,_0x5763ea,_0x24e3ed){return _0x3eb227(_0x3311b0,_0x26b38c,_0x263775,_0x2347b6,_0x5763ea,_0x24e3ed);},'AFLbc':function(_0x557f18,_0x158cfc){return _0x557f18===_0x158cfc;}},_0x2bbcd2=_0x51472d['action']||{},_0x89bd8e=getEnabledActions(_0x51472d);let _0x135fa9='';if(!_0x187cd0){const _0x118ed8=FileUtils['toCamelCase'](_0x5295b1);_0x187cd0=_0x118ed8+_0x2b2e2e(0x20e);}return _0x2bbcd2['datatables']&&(_0x135fa9+=_0x14d833[_0x2b2e2e(0x148)](generateDatatablesFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0x1c8)]&&(_0x135fa9+=_0x14d833['wuogr'](generateCreateFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0,_0x1015e5)),_0x2bbcd2['update']&&(_0x135fa9+=generateUpdateFunction(_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0,_0x1015e5)),_0x2bbcd2[_0x2b2e2e(0xe0)]&&(_0x135fa9+=_0x14d833[_0x2b2e2e(0x255)](generateAdjustFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0x126)]&&(_0x135fa9+=_0x14d833[_0x2b2e2e(0xa7)](generateAggregateFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0x26b)]&&(_0x135fa9+=_0x14d833['cYHCu'](generateDeleteFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0,_0x1015e5)),_0x2bbcd2[_0x2b2e2e(0x24d)]&&_0x14d833[_0x2b2e2e(0x11f)](isSoftDeleteEnabled,_0x51472d)&&(_0x135fa9+=_0x14d833['dapRV'](generateRestoreFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0x12c)]&&(_0x135fa9+=_0x14d833['gYOYk'](generateFirstFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x3880a6,_0x47e743,_0x187cd0)),_0x2bbcd2['lookup']&&(_0x135fa9+=_0x14d833['gYOYk'](generateLookupFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x3880a6,_0x47e743,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0x1f6)]&&(_0x135fa9+=generateReadFunction(_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0xc6)]&&(_0x135fa9+=generateCreateCompositeFunction(_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0xf4)]&&(_0x135fa9+=_0x14d833[_0x2b2e2e(0xa7)](generateUpdateCompositeFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2[_0x2b2e2e(0xce)]&&(_0x135fa9+=_0x14d833[_0x2b2e2e(0xa7)](generateReadCompositeFunction,_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x2bbcd2['workflow']&&(_0x135fa9+=generateWorkflowFunction(_0x4947a7,_0x5295b1,_0x51472d,_0x187cd0)),_0x14d833['AFLbc'](_0x89bd8e[_0x2b2e2e(0x25c)],0x0)&&(_0x135fa9+='\x0a//\x20No\x20actions\x20enabled\x20for\x20this\x20endpoint\x0a//\x20Enable\x20actions\x20in\x20payload\x20to\x20generate\x20endpoints'),_0x135fa9;}function generateDatatablesFunction(_0x142580,_0x282205,_0x29d24d,_0x51a08a=null){const _0x33f8b8=a0_0x25cec5;if(!_0x51a08a){const _0x22f8e7=FileUtils[_0x33f8b8(0x11c)](_0x282205);_0x51a08a=_0x22f8e7+_0x33f8b8(0x20e);}return _0x33f8b8(0x15c)+_0x142580+'/'+_0x282205+_0x33f8b8(0x10a)+_0x282205+_0x33f8b8(0x174)+_0x51a08a+_0x33f8b8(0x287)+_0x282205+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20options:\x20options,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json(result);\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x282205+_0x33f8b8(0x150)+_0x282205+_0x33f8b8(0xba);}function generateCreateFunction(_0x3cf1d4,_0x484e8a,_0xda9629,_0x348880=null,_0x4f7fbf=![]){const _0x4c3bd7=a0_0x25cec5,_0x452876={'wFhrQ':function(_0x346739,_0x5ce087){return _0x346739(_0x5ce087);}};if(!_0x348880){const _0x4254cd=FileUtils['toCamelCase'](_0x484e8a);_0x348880=_0x4254cd+'Model';}const _0x45e05d=isSoftDeleteEnabled(_0xda9629)?_0x4c3bd7(0x145)+JSON[_0x4c3bd7(0xb7)](SOFT_DELETE_COLUMNS)+_0x4c3bd7(0x115):'',_0x167ecc=hasSoftDeleteFkParents(_0xda9629)?'\x0a\x20\x20\x20\x20//\x20FK-SD-1:\x20parent\x20soft-delete\x20wajib\x20aktif\x20untuk\x20tiap\x20kolom\x20FK\x20yang\x20diisi\x20(pre-check\x20422).\x0a\x20\x20\x20\x20await\x20'+_0x348880+_0x4c3bd7(0x1c1):'',_0x58bdfb=_0x452876[_0x4c3bd7(0xdf)](hasSoftDeleteFkParents,_0xda9629)?'\x0a\x20\x20\x20\x20//\x20FK-SD-1:\x20parent\x20soft-delete\x20terhapus/absen\x20→\x20422\x20(shape\x20selaras\x20FK\x20restore\x20R20).\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Unprocessable\x20Entity\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'',_0x523417=_0x4f7fbf?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20INSERT\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabled\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabled\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.insert)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishInsert(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x3cf1d4+_0x4c3bd7(0xe7)+_0x484e8a+_0x4c3bd7(0x28d)+(_0xda9629['primaryKey']||'id')+_0x4c3bd7(0x1d5)+_0xda9629[_0x4c3bd7(0x152)]+_0x4c3bd7(0x194):'',_0x118440=_0x4f7fbf?_0x4c3bd7(0x180):'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return'\x0a//\x20POST\x20/api/'+_0x3cf1d4+'/'+_0x484e8a+'/create\x20-\x20Menambahkan\x20data\x20'+_0x484e8a+_0x4c3bd7(0x119)+_0x484e8a+'/create:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x118440+_0x4c3bd7(0x23c)+_0x348880+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x348880+_0x4c3bd7(0x23b)+_0x45e05d+'\x0a'+_0x167ecc+_0x4c3bd7(0x17c)+_0xda9629[_0x4c3bd7(0x152)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x348880+'.addData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x348880+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x484e8a+_0x4c3bd7(0x1a4)+(_0xda9629[_0x4c3bd7(0x107)]||'id')+_0x4c3bd7(0x279)+_0x523417+_0x4c3bd7(0xd9)+_0x484e8a+_0x4c3bd7(0x1f2)+_0x484e8a+_0x4c3bd7(0x182)+_0x58bdfb+_0x4c3bd7(0x1a0)+_0x484e8a+_0x4c3bd7(0xba);}function generateUpdateFunction(_0x5e44d0,_0x601bcb,_0x1e58ed,_0x5c3b0e=null,_0x2c2e80=![]){const _0x311e41=a0_0x25cec5,_0x1a59f4={'ImKAS':function(_0x2f03d9,_0x7c0282){return _0x2f03d9(_0x7c0282);},'JjHTB':function(_0x3c794,_0x2d486a){return _0x3c794(_0x2d486a);},'TjMmO':function(_0x3898e6,_0x11a8f5){return _0x3898e6(_0x11a8f5);}};if(!_0x5c3b0e){const _0x2563b9=FileUtils['toCamelCase'](_0x601bcb);_0x5c3b0e=_0x2563b9+'Model';}const _0x20e816=_0x1e58ed[_0x311e41(0xb9)]?',\x20'+JSON['stringify'](_0x1e58ed['fieldPolicy']):'',_0x5e42a3=_0x1e58ed[_0x311e41(0x199)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x5c3b0e+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x601bcb+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x449638=_0x1a59f4[_0x311e41(0x22b)](softDeleteVisibilityFilter,_0x1e58ed),_0x2448f6=_0x449638!==null?_0x311e41(0x232)+_0x5c3b0e+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20\x27'+IS_DELETED_COLUMN+'\x27,\x20value:\x20'+_0x449638+_0x311e41(0x203)+_0x601bcb+_0x311e41(0x23f):'',_0x479a81=isSoftDeleteEnabled(_0x1e58ed)?_0x311e41(0x145)+JSON['stringify'](SOFT_DELETE_COLUMNS)+_0x311e41(0x115):'',_0x4680e4=_0x1a59f4[_0x311e41(0x114)](hasSoftDeleteFkParents,_0x1e58ed)?_0x311e41(0x23a)+_0x5c3b0e+'.checkSoftDeleteFkParents(req.body,\x20\x27update\x27);\x0a':'',_0x50e007=_0x1a59f4['TjMmO'](hasSoftDeleteFkParents,_0x1e58ed)?_0x311e41(0x205):'',_0x1c3294=_0x2c2e80?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20UPDATE\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabledUpdate\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabledUpdate\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.update)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishUpdate(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x5e44d0+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x601bcb+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x1e58ed[_0x311e41(0x107)]||'id')+_0x311e41(0x1d5)+_0x1e58ed['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20correlationId:\x20correlationId\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20).catch(err\x20=>\x20console.error(\x27[Kafka]\x20Async\x20publish\x20error:\x27,\x20err.message));\x0a\x20\x20\x20\x20}\x0a':'',_0x157a85=_0x2c2e80?_0x311e41(0x180):'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return'\x0a//\x20POST\x20/api/'+_0x5e44d0+'/'+_0x601bcb+_0x311e41(0x172)+_0x601bcb+'\x0arouter.post(\x27/update\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x601bcb+'/update:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x157a85+_0x311e41(0x1b3)+(_0x1e58ed[_0x311e41(0x107)]||'id')+'\x27;\x0a\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x5e42a3+_0x2448f6+'\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20primary\x20key\x20adalah\x20UUID\x20yang\x20valid\x20(jika\x20primary\x20key\x20adalah\x20\x27id\x27)\x0a\x20\x20\x20\x20const\x20uuidRegex\x20=\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\x0a\x20\x20\x20\x20const\x20isValidUUID\x20=\x20primaryKey\x20===\x20\x27id\x27\x20&&\x20uuidRegex.test(req.body[primaryKey]);\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20data\x20dengan\x20model\x20jika\x20tersedia\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x5c3b0e+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x5c3b0e+_0x311e41(0x18b)+_0x479a81+'\x0a'+_0x4680e4+_0x311e41(0x23d)+_0x1e58ed[_0x311e41(0x152)]+_0x311e41(0x1a9)+_0x5c3b0e+'.updateData(req.body,\x20eventContext'+_0x20e816+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x5c3b0e+_0x311e41(0x11b)+_0x20e816+_0x311e41(0x10e)+_0x601bcb+'\x20data\x20updated\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a'+_0x1c3294+_0x311e41(0x223)+_0x601bcb+'\x20data\x20successfully\x20updated\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengupdate\x20data\x20'+_0x601bcb+':\x27,\x20error);\x0a'+_0x50e007+'\x0a\x20\x20\x20\x20//\x20Handle\x20khusus\x20untuk\x20error\x20\x22Data\x20tidak\x20ditemukan\x22\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x601bcb+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x20//\x20PostgreSQL\x20unique\x20violation\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0x601bcb+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAdjustFunction(_0x1bbd71,_0x381acf,_0x5234c6,_0x5db10a=null){const _0x3544fc=a0_0x25cec5;if(!_0x5db10a){const _0x300baa=FileUtils['toCamelCase'](_0x381acf);_0x5db10a=_0x300baa+_0x3544fc(0x20e);}const _0x3ea6ef=_0x5234c6[_0x3544fc(0x1b1)]?JSON['stringify'](_0x5234c6['adjustConfig']):'{}',_0x17681b=_0x5234c6['fieldPolicy']?',\x20'+JSON['stringify'](_0x5234c6['fieldPolicy']):'',_0x2f5a2f=_0x5234c6[_0x3544fc(0xb9)]?',\x20null,\x20'+JSON['stringify'](_0x5234c6['fieldPolicy']):'',_0x19f85f=_0x5234c6['requestScope']?_0x3544fc(0x245)+_0x5db10a+_0x3544fc(0x27f)+_0x381acf+_0x3544fc(0x22e):'';return _0x3544fc(0x15c)+_0x1bbd71+'/'+_0x381acf+'/adjust\x20-\x20Adjust\x20data\x20'+_0x381acf+_0x3544fc(0x158)+(_0x5234c6['primaryKey']||'id')+_0x3544fc(0xab)+_0x19f85f+_0x3544fc(0x1ec)+_0x3ea6ef+_0x3544fc(0x1b9)+_0x5234c6[_0x3544fc(0x152)]+_0x3544fc(0x1a9)+_0x5db10a+'.adjustData(req.body,\x20adjustConfig,\x20eventContext'+_0x17681b+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20ADJUST\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20events\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x5db10a+_0x3544fc(0x295)+_0x2f5a2f+_0x3544fc(0xf3)+_0x381acf+'\x20data\x20adjusted\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x381acf+_0x3544fc(0x23e)+_0x381acf+_0x3544fc(0x192)+_0x381acf+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adjusting\x20'+_0x381acf+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAggregateFunction(_0x2bb437,_0x13deea,_0x4b5095,_0x40dee3=null){const _0x40a181=a0_0x25cec5;if(!_0x40dee3){const _0x4bce5a=FileUtils[_0x40a181(0x11c)](_0x13deea);_0x40dee3=_0x4bce5a+'Model';}const _0x45b802=_0x4b5095['aggregateConfig']?JSON[_0x40a181(0xb7)](_0x4b5095['aggregateConfig']):'{}';return'\x0a//\x20POST\x20/api/'+_0x2bb437+'/'+_0x13deea+'/aggregate\x20-\x20Aggregate\x20data\x20(count,\x20sum,\x20avg,\x20min,\x20max)\x0arouter.post(\x27/aggregate\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20aggregateConfig\x20=\x20'+_0x45b802+';\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x40dee3+'.aggregateData(req.body\x20||\x20{},\x20aggregateConfig);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengagregasi\x20data\x20'+_0x13deea+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20403)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Pro\x20Feature\x20Required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20upgrade:\x20\x27https://restforge.dev/pricing\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20400\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20a\x20valid\x20field\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20aggregate\x20function\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20alias\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27only\x20allowed\x20with\x20COUNT\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20defined\x20in\x20aggregate\x20config\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27no\x20join\x20definitions\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20aggregating\x20'+_0x13deea+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function hasSoftDeleteFkRestrictChildren(_0x18a499){const _0x46622d=a0_0x25cec5;return Array[_0x46622d(0x294)](_0x18a499[_0x46622d(0x14a)])&&_0x18a499[_0x46622d(0x14a)]['some'](_0x35e6e1=>_0x35e6e1&&_0x35e6e1[_0x46622d(0xd3)]===_0x46622d(0x1d8));}function hasCascadeChildren(_0x219420){const _0x565610=a0_0x25cec5,_0xcd8d9={'HkccX':_0x565610(0x241)},_0x2cec36=_0x219420&&_0x219420['softDeleteCascadeTree'];return!!(_0x2cec36&&typeof _0x2cec36===_0x565610(0x1bf)&&typeof _0x2cec36[_0x565610(0x216)]===_0xcd8d9['HkccX']&&_0x2cec36[_0x565610(0x216)]&&_0x2cec36[_0x565610(0x153)]&&typeof _0x2cec36['nodes']===_0x565610(0x1bf)&&_0x2cec36[_0x565610(0x153)][_0x2cec36['master']]);}function generateDeleteFunction(_0x29c937,_0x3ec296,_0xa33821,_0x282c17=null,_0x144675=![]){const _0x3cf801=a0_0x25cec5,_0x4a9e5a={'NSwYq':function(_0x35ce32,_0x13d6df){return _0x35ce32(_0x13d6df);}};if(!_0x282c17){const _0x307bde=FileUtils[_0x3cf801(0x11c)](_0x3ec296);_0x282c17=_0x307bde+'Model';}const _0x411a91=_0x144675?_0x3cf801(0x1b2)+_0x29c937+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x3ec296+_0x3cf801(0xac)+(_0xa33821['primaryKey']||'id')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0xa33821[_0x3cf801(0x152)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20correlationId:\x20correlationId\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20).catch(err\x20=>\x20console.error(\x27[Kafka]\x20Async\x20publish\x20error:\x27,\x20err.message));\x0a\x20\x20\x20\x20}\x0a':'',_0xce53a8=_0x144675?_0x3cf801(0x180):'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return'\x0a//\x20POST\x20/api/'+_0x29c937+'/'+_0x3ec296+'/delete\x20-\x20Menghapus\x20data\x20'+_0x3ec296+_0x3cf801(0xc8)+_0x3ec296+_0x3cf801(0x101)+_0xce53a8+_0x3cf801(0x28f)+_0x282c17+_0x3cf801(0x139)+_0x3ec296+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Simpan\x20data\x20untuk\x20event\x20lifecycle\x20dan\x20debug\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData\x20=\x20existingData.data[0];\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(checkError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Verification\x20Failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Could\x20not\x20verify\x20data\x20existence\x20before\x20delete\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20checkError.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0xa33821['tableName']+_0x3cf801(0x1a9)+_0x282c17+'.deleteData(req.body,\x20eventContext);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x282c17+_0x3cf801(0x1dd)+_0x3ec296+'\x20data\x20deleted\x20successfully`);\x0a'+_0x411a91+'\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menghapus\x20data\x20'+_0x3ec296+_0x3cf801(0x182)+(_0xa33821['softDelete']?.['enabled']?_0x3cf801(0x209)+_0x3ec296+'\x20data\x20not\x20found\x20or\x20already\x20deleted\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'')+(hasSoftDeleteFkRestrictChildren(_0xa33821)||_0x4a9e5a[_0x3cf801(0x162)](hasCascadeChildren,_0xa33821)?_0x3cf801(0xa5):'')+_0x3cf801(0xb4)+_0x3ec296+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateRestoreFunction(_0x4e9c3a,_0x3ccf41,_0x277e3f,_0x32d4da=null){const _0x458116=a0_0x25cec5;if(!_0x32d4da){const _0x25e0db=FileUtils[_0x458116(0x11c)](_0x3ccf41);_0x32d4da=_0x25e0db+'Model';}return _0x458116(0x15c)+_0x4e9c3a+'/'+_0x3ccf41+_0x458116(0xc2)+_0x3ccf41+'\x20yang\x20ter-soft-delete\x20(R20)\x0arouter.post(\x27/restore\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Restore\x20adalah\x20event\x20lifecycle:\x20model.restoreData\x20menjalankan\x20transaksinya\x20sendiri\x0a\x20\x20\x20\x20//\x20(SELECT\x20FOR\x20UPDATE\x20→\x20strip/konflik/FK\x20→\x20reset\x20→\x20COMMIT\x20→\x20invalidateCache).\x0a\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x277e3f['tableName']+_0x458116(0x252)+_0x32d4da+_0x458116(0x215)+_0x3ccf41+_0x458116(0x1fc)+_0x3ccf41+_0x458116(0x177)+_0x3ccf41+'\x20data\x20not\x20found\x20or\x20not\x20deleted\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Conflict\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Unprocessable\x20Entity\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//\x20Backstop\x20konflik:\x20UNIQUE\x20violation\x20saat\x20UPDATE\x20(race\x20konkuren)\x20→\x20409.\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Conflict\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Cannot\x20restore:\x20the\x20reusable\x20code\x20is\x20already\x20in\x20use\x20by\x20an\x20active\x20record\x20(unique\x20constraint)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20restoring\x20'+_0x3ccf41+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateFirstFunction(_0x42bf20,_0x44e374,_0x54b82b,_0x340463,_0x2ba4a2,_0x311c7d=null){const _0x284757=a0_0x25cec5,_0x1e83b7={'ddFrf':function(_0x94da1c,_0x32ded7){return _0x94da1c(_0x32ded7);},'IeFkk':function(_0x42da4c,_0x21dcc7){return _0x42da4c!==_0x21dcc7;}};if(!_0x311c7d){const _0x20f7ea=FileUtils['toCamelCase'](_0x44e374);_0x311c7d=_0x20f7ea+'Model';}const _0x3192fb=_0x54b82b['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope\x20&&\x20result.data\x20&&\x20result.data.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20record\x20=\x20result.data[0];\x0a\x20\x20\x20\x20\x20\x20if\x20(record[req._requestScope.column]\x20!==\x20undefined\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20String(record[req._requestScope.column])\x20!==\x20String(req._requestScope.value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x44e374+_0x284757(0xf2):'',_0x354efd=_0x1e83b7['ddFrf'](softDeleteVisibilityFilter,_0x54b82b),_0x55144a=_0x354efd!==null?_0x284757(0x1a8)+IS_DELETED_COLUMN+'\x27,\x20value:\x20'+_0x354efd+'\x20});':'',_0x54fcc2=_0x1e83b7[_0x284757(0x1ca)](_0x354efd,null)?'\x0a\x20\x20\x20\x20if\x20(!result.data\x20||\x20result.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x44e374+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}':'';return'\x0a//\x20POST\x20/api/'+_0x42bf20+'/'+_0x44e374+'/first\x20-\x20Mendapatkan\x20data\x20'+_0x44e374+'\x20berdasarkan\x20kriteria\x0arouter.post(\x27/first\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x44e374+'/first:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20->\x20object\x20(backward\x20compatible)\x0a\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x20-\x20harus\x20object\x20tunggal\x20{key,\x20value}\x0a\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20where\x20is\x20required\x20as\x20{key,\x20value}\x20object\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22'+(_0x54b82b['primaryKey']||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where.key\x20dan\x20where.value\x0a\x20\x20\x20\x20if\x20(!req.body.where.key\x20||\x20req.body.where.value\x20===\x20undefined\x20||\x20req.body.where.value\x20===\x20null\x20||\x20req.body.where.value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20key\x20and\x20value\x20are\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22'+(_0x54b82b[_0x284757(0x107)]||'id')+_0x284757(0x24f)+JSON[_0x284757(0xb7)](_0x54b82b[_0x284757(0x146)]||[])+';\x0a\x20\x20\x20\x20if\x20(!validFields.includes(req.body.where.key))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field:\x20${req.body.where.key}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Convert\x20ke\x20array\x20format\x20untuk\x20kompatibilitas\x20dengan\x20model.getData()\x20->\x20buildComplexWhereClause()\x0a\x20\x20\x20\x20const\x20getPayload\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20req.body.where.key,\x20value:\x20req.body.where.value\x20}],\x0a\x20\x20\x20\x20\x20\x20select:\x20req.body.select\x0a\x20\x20\x20\x20};'+_0x55144a+'\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x311c7d+'.getData(getPayload);'+_0x54fcc2+'\x0a'+_0x3192fb+'\x0a\x20\x20\x20\x20//\x20Add\x20metadata\x20untuk\x20debugging\x20(development\x20only)\x0a\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20===\x20\x27development\x27\x20&&\x20result.success)\x20{\x0a\x20\x20\x20\x20\x20\x20result._metadata\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0x44e374+_0x284757(0x12f)+_0x44e374+_0x284757(0xaf)+_0x44e374+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateLookupFunction(_0x32a6a4,_0x370a8b,_0x5a9d72,_0x101cde,_0x3745af,_0x2c2665=null){const _0x472d50=a0_0x25cec5,_0x547c1d={'ywQce':'code','yaTwl':_0x472d50(0x244)};if(!_0x2c2665){const _0x3d2eeb=FileUtils['toCamelCase'](_0x370a8b);_0x2c2665=_0x3d2eeb+'Model';}const _0x520dc1=_0x5a9d72['_lookupConfig']||null;return _0x472d50(0x169)+_0x32a6a4+'/'+_0x370a8b+_0x472d50(0x1df)+_0x370a8b+_0x472d50(0x220)+_0x370a8b+_0x472d50(0xda)+_0x2c2665+'.getLookupDataDynamic(search,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20console.log(`Lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20search:\x20search,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x370a8b+'\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20looking\x20up\x20'+_0x370a8b+_0x472d50(0x226)+_0x32a6a4+'/'+_0x370a8b+_0x472d50(0xf7)+_0x370a8b+_0x472d50(0x17e)+JSON['stringify'](_0x520dc1)+_0x472d50(0x193)+_0x3745af+_0x472d50(0x208)+(_0x101cde['all']?_0x101cde[_0x472d50(0x1fb)][_0x472d50(0x125)](_0x45da44=>_0x45da44!=='id')||_0x547c1d['ywQce']:_0x472d50(0x100))+_0x472d50(0x1da)+_0x3745af+'||\x27\x20-\x20\x27||code\x20as\x20display_text\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_custom_lookup:\x20lookupConfig\x20?\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[lookupConfig.idField,\x20lookupConfig.textField],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22note\x22:\x20\x22Using\x20fieldNameLookup\x20configuration\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20:\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x3745af+_0x472d50(0x1ce)+_0x3745af+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%system%\x22,\x20\x22sensitive\x22:\x20false\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+(_0x101cde[_0x472d50(0x21b)]?_0x101cde['textFields'][_0x472d50(0x1e8)](0x0,0x4)[_0x472d50(0x117)]('\x22,\x20\x22'):_0x5a9d72['fieldName']['slice'](0x0,0x4)['join'](_0x472d50(0x244)))+_0x472d50(0x1b0)+_0x3745af+'\x22],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22sort_columns\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22column\x22:\x20\x22'+(_0x5a9d72['fieldName'][0x1]||_0x3745af)+_0x472d50(0x120)+_0x3745af+_0x472d50(0x219)+_0x370a8b+_0x472d50(0x134)+(_0x101cde['all']?_0x101cde[_0x472d50(0x1fb)][_0x472d50(0x125)](_0x560c5d=>_0x560c5d!=='id')||_0x547c1d['ywQce']:_0x472d50(0x100))+_0x472d50(0x26d)+_0x3745af+_0x472d50(0x130)+_0x3745af+_0x472d50(0x13a)+_0x3745af+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%system%\x22,\x20\x22sensitive\x22:\x20false\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+(_0x101cde['textFields']?_0x101cde['textFields'][_0x472d50(0x1e8)](0x0,0x4)[_0x472d50(0x117)]('\x22,\x20\x22'):_0x5a9d72['fieldName'][_0x472d50(0x1e8)](0x0,0x4)[_0x472d50(0x117)](_0x547c1d[_0x472d50(0x178)]))+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x20(support\x20SQL\x20expressions)\x0a\x20\x20\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON['stringify'](_0x5a9d72[_0x472d50(0x146)]||[])+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20[];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20setiap\x20field\x20dalam\x20select\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20req.body.select)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validasi\x20untuk\x20field\x20\x27id\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(field.toLowerCase()\x20===\x20\x27id\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validasi\x20jika\x20ada\x20SQL\x20expression\x20dengan\x20AS\x20(alias)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(/\x5cs+as\x5cs+\x5cw+$/i.test(field))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validasi\x20jika\x20ada\x20SQL\x20operators/functions\x20(||,\x20CONCAT,\x20dll)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(/\x5c|\x5c||CONCAT|COALESCE|CASE|WHEN/i.test(field))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Validasi\x20normal\x20field\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!validFields.includes(field))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20invalidFields.push(field);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sqlExpressionNote:\x20\x27SQL\x20expressions\x20dengan\x20operator\x20||\x20atau\x20AS\x20alias\x20diperbolehkan\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20method\x20getLookupDataWithFilter\x0a\x20\x20\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x2c2665+_0x472d50(0x171)+_0x370a8b+'\x20static\x20lookup\x20request\x20with\x20selected_tag:\x20${selectedTag}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Jika\x20ada\x20field\x20select\x20atau\x20sort_columns,\x20gunakan\x20getLookupDataWithFilter\x20dengan\x20body\x20yang\x20dimodifikasi\x0a\x20\x20\x20\x20\x20\x20if\x20((req.body.select\x20&&\x20Array.isArray(req.body.select))\x20||\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Found\x20select\x20fields\x20or\x20sort_columns,\x20using\x20getLookupDataWithFilter\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Buat\x20body\x20baru\x20dengan\x20where\x20kosong\x20untuk\x20mengambil\x20semua\x20data\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20modifiedBody\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...req.body,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[]\x20//\x20Empty\x20where\x20untuk\x20mengambil\x20semua\x20data\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x2c2665+'.getLookupDataWithFilter(modifiedBody);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Static\x20lookup\x20with\x20select/order\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectedTag:\x20selectedTag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20query:\x20modifiedBody,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x20dengan\x20method\x20lama\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x2c2665+'.getStaticLookupData(selectedTag);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Static\x20lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectedTag:\x20selectedTag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x370a8b+'\x20static\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x370a8b+_0x472d50(0xba);}function generateReadFunction(_0x5cbe08,_0x33ebad,_0x321d3f,_0x490cd9=null){const _0x14e74e=a0_0x25cec5;if(!_0x490cd9){const _0x1568bc=FileUtils[_0x14e74e(0x11c)](_0x33ebad);_0x490cd9=_0x1568bc+'Model';}return'\x0a//\x20POST\x20/api/'+_0x5cbe08+'/'+_0x33ebad+'/read\x20-\x20Manual\x20pagination\x20endpoint\x0arouter.post(\x27/read\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x33ebad+'/read:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Deteksi\x20mode:\x20paginasi\x20(page\x20dikirim)\x20atau\x20non-paginasi\x20(page\x20tidak\x20dikirim)\x0a\x20\x20\x20\x20const\x20paginate\x20=\x20req.body.page\x20!==\x20undefined;\x0a\x20\x20\x20\x20const\x20page\x20=\x20paginate\x20?\x20parseInt(req.body.page,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20perPage\x20=\x20paginate\x20?\x20parseInt(req.body.per_page\x20||\x2010,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20limit\x20=\x20!paginate\x20?\x20Math.min(Math.max(parseInt(req.body.limit\x20||\x201000,\x2010),\x201),\x205000)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20searchValue\x20=\x20req.body.search_value\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20const\x20searchBy\x20=\x20req.body.search_by\x20||\x20\x27'+(_0x321d3f[_0x14e74e(0x107)]||_0x321d3f['fieldName'][0x0]||'id')+_0x14e74e(0x106)+JSON[_0x14e74e(0xb7)](_0x321d3f['fieldName']||[])+';\x0a\x20\x20\x20\x20let\x20select\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20select\x20=\x20req.body.select;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20parameter\x20paginasi\x20(hanya\x20jika\x20mode\x20paginasi)\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(page\x20<\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20page:\x20[\x27Page\x20must\x20be\x20greater\x20than\x200\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(perPage\x20<\x201\x20||\x20perPage\x20>\x20100)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20[\x27Per\x20page\x20must\x20be\x20between\x201\x20and\x20100\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(searchValue.length\x20>\x20255)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20search_value:\x20[\x27Search\x20value\x20must\x20not\x20exceed\x20255\x20characters\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20kolom\x20searching\x0a\x20\x20\x20\x20if\x20(!validFields.includes(searchBy))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20search_by:\x20[`Invalid\x20search\x20field.\x20Valid\x20fields:\x20${validFields.join(\x27,\x20\x27)}`]\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20options\x20untuk\x20model\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue:\x20searchValue,\x0a\x20\x20\x20\x20\x20\x20searchBy:\x20searchBy,\x0a\x20\x20\x20\x20\x20\x20sort_columns:\x20sort_columns,\x0a\x20\x20\x20\x20\x20\x20where:\x20where,\x0a\x20\x20\x20\x20\x20\x20select:\x20select\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20options.page\x20=\x20page;\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x20perPage;\x0a\x20\x20\x20\x20\x20\x20options.offset\x20=\x20(page\x20-\x201)\x20*\x20perPage;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20options.limit\x20=\x20limit;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x20list\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x490cd9+'.getList(options);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20response\x20berdasarkan\x20mode\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20Math.ceil(result.totalRecords\x20/\x20perPage);\x0a\x20\x20\x20\x20\x20\x20const\x20hasNext\x20=\x20page\x20<\x20totalPages;\x0a\x20\x20\x20\x20\x20\x20const\x20hasPrevious\x20=\x20page\x20>\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20pagination:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20current_page:\x20page,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20perPage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_records:\x20result.totalRecords\x20||\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_pages:\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_next:\x20hasNext,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_previous:\x20hasPrevious\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x33ebad+_0x14e74e(0xa6)+_0x33ebad+'\x20list\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateCreateCompositeFunction(_0x1654b7,_0x4c90e8,_0x2df639,_0x2a605e=null){const _0x97df39=a0_0x25cec5,_0x84f3b1={'wgOuh':'items.','bACWe':'unit_price','qCJVU':'\x20(with\x20detail\x20items)'};if(!_0x2a605e){const _0x28fac4=FileUtils[_0x97df39(0x11c)](_0x4c90e8);_0x2a605e=_0x28fac4+'Model';}const _0x264976=_0x2df639['masterDetail']&&_0x2df639[_0x97df39(0x149)]['enabled'],_0x6321cb=_0x264976?_0x2df639[_0x97df39(0x149)][_0x97df39(0xb6)]:null,_0x120c9f=_0x6321cb?_0x6321cb[_0x97df39(0x16a)]('.')['pop']():_0x97df39(0xf5),_0x24b769=_0x4c90e8[_0x97df39(0x20d)](/-/g,'_'),_0x5e3d0d=_0x2df639[_0x97df39(0x149)]?.['detailConfig']?.['autoCalculateFields']?.[_0x97df39(0xf8)]?.['formula']||'',_0x17a74a=_0x5e3d0d['split']('*')[_0x97df39(0x12a)](_0x281c1e=>_0x281c1e['trim']()),_0x5d4482=_0x2df639['masterDetail']?.['headerCalculations']?.['total_qty']?.[_0x97df39(0x12d)]?.['replace'](_0x84f3b1[_0x97df39(0xc4)],'')||'',_0x35439a=_0x17a74a[0x0]||_0x5d4482,_0x53b034=_0x17a74a[0x1]||_0x84f3b1[_0x97df39(0x293)];return'\x0a//\x20POST\x20/api/'+_0x1654b7+'/'+_0x4c90e8+_0x97df39(0xbc)+(_0x264976?'(master-detail\x20transaction)':'')+'\x0arouter.post(\x27/create-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x4c90e8+_0x97df39(0xc3)+_0x24b769+_0x97df39(0x236)+_0x24b769+'\x22\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20'+(_0x264976?_0x97df39(0x1f1)+_0x24b769+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x120c9f+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':_0x97df39(0x1f1)+_0x24b769+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}')+_0x97df39(0xd4)+_0x24b769+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x2a605e+_0x97df39(0x168)+(_0x264976?'delete\x20headerDataForValidation.'+_0x120c9f+';':'')+_0x97df39(0x1a1)+_0x2a605e+'.validateData(headerDataForValidation,\x20\x27insert\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Merge\x20sanitized\x20data\x20(termasuk\x20hash\x20result)\x20kembali\x20ke\x20data\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20'+(_0x264976?'\x0a\x20\x20\x20\x20//\x20Validasi\x20detail\x20items\x20untuk\x20master-detail\x0a\x20\x20\x20\x20if\x20(!data.'+_0x120c9f+'\x20||\x20!Array.isArray(data.'+_0x120c9f+_0x97df39(0x1d3)+_0x120c9f+'.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x120c9f+'\x22\x20must\x20be\x20a\x20non-empty\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Auto-calculate\x20totals\x20jika\x20ada\x20konfigurasi\x0a\x20\x20\x20\x20'+(_0x2df639[_0x97df39(0x149)][_0x97df39(0x21d)]?_0x97df39(0x156)+JSON['stringify'](_0x2df639['masterDetail']['headerCalculations'])+';\x0a\x20\x20\x20\x20if\x20(headerCalc.total_items)\x20{\x0a\x20\x20\x20\x20\x20\x20data.total_items\x20=\x20data.'+_0x120c9f+'.length;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(headerCalc.total_qty\x20&&\x20headerCalc.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20headerCalc.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20data.total_qty\x20=\x20data.'+_0x120c9f+_0x97df39(0x1bb)+(_0x35439a?_0x97df39(0x258)+_0x35439a+_0x97df39(0x1c9)+_0x53b034+_0x97df39(0x151)+_0x120c9f+_0x97df39(0x136)+_0x35439a+_0x97df39(0xdd)+_0x53b034+_0x97df39(0x217):'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured\x20(set\x20autoCalculateFields.total_amount.formula\x20or\x20headerCalculations.total_qty.source)')+'\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20console.log(\x27Calculated\x20totals:\x27,\x20{\x0a\x20\x20\x20\x20\x20\x20total_items:\x20data.total_items,\x0a\x20\x20\x20\x20\x20\x20total_qty:\x20data.total_qty,\x0a\x20\x20\x20\x20\x20\x20total_amount:\x20data.total_amount\x0a\x20\x20\x20\x20});\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2df639['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x6321cb+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+(_0x264976?_0x2df639['masterDetail'][_0x97df39(0xfc)]:'')+_0x97df39(0x26e)+_0x2a605e+'.createComposite(data,\x20eventContext);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x4c90e8+'\x20composite\x20create\x20successful`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(201).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x4c90e8+_0x97df39(0x1d2)+(_0x264976?_0x84f3b1['qCJVU']:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20create\x20'+_0x4c90e8+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20creating\x20'+_0x4c90e8+_0x97df39(0xba);}function generateUpdateCompositeFunction(_0x46031e,_0x20e0e2,_0x57db0b,_0x493ee2=null){const _0x51a112=a0_0x25cec5,_0x33b6b9={'CxSHC':'items'};if(!_0x493ee2){const _0x78acf9=FileUtils[_0x51a112(0x11c)](_0x20e0e2);_0x493ee2=_0x78acf9+_0x51a112(0x20e);}const _0x38dfa3=_0x57db0b['masterDetail']&&_0x57db0b[_0x51a112(0x149)][_0x51a112(0x15b)],_0xe78b9f=_0x38dfa3?_0x57db0b['masterDetail']['detailTable']:null,_0xcdc513=_0xe78b9f?_0xe78b9f['split']('.')['pop']():_0x33b6b9[_0x51a112(0x256)],_0x349c0c=_0x20e0e2[_0x51a112(0x20d)](/-/g,'_'),_0x5f1e5e=_0x57db0b[_0x51a112(0x107)]||'id',_0x20caeb=_0x57db0b['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x20—\x20master\x20record\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x493ee2+_0x51a112(0x110)+_0x5f1e5e+_0x51a112(0x155)+_0x5f1e5e+'\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Master\x20record\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return'\x0a//\x20POST\x20/api/'+_0x46031e+'/'+_0x20e0e2+_0x51a112(0x262)+(_0x38dfa3?'(master-detail\x20transaction)':'')+'\x0arouter.post(\x27/update-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x20e0e2+_0x51a112(0x113)+_0x349c0c+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20must\x20have\x20property\x20\x22'+_0x349c0c+'\x22\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20'+(_0x38dfa3?'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x349c0c+_0x51a112(0x27b)+_0x5f1e5e+_0x51a112(0x1f0)+_0xcdc513+_0x51a112(0x1dc):'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x349c0c+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x5f1e5e+_0x51a112(0x1a3))+_0x51a112(0xd4)+_0x349c0c+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20if\x20(!data.'+_0x5f1e5e+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Primary\x20key\x20('+_0x5f1e5e+')\x20is\x20required\x20for\x20update\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x20caeb+_0x51a112(0x1b5)+_0x493ee2+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20saja\x20(exclude\x20detail)\x20untuk\x20validation\x0a\x20\x20\x20\x20\x20\x20const\x20headerDataForValidation\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20'+(_0x38dfa3?'delete\x20headerDataForValidation.'+_0xcdc513+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x493ee2+_0x51a112(0x222)+(_0x38dfa3?_0x51a112(0x282)+_0xcdc513+_0x51a112(0x122)+_0xcdc513+_0x51a112(0x198)+_0xcdc513+'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0xcdc513+_0x51a112(0x103)+_0xcdc513+';\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.insert\x20&&\x20!Array.isArray(operations.insert))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0xcdc513+'.insert\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.update\x20&&\x20!Array.isArray(operations.update))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0xcdc513+_0x51a112(0x253)+_0xcdc513+_0x51a112(0x104):'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x57db0b[_0x51a112(0x152)]+_0x51a112(0xca)+_0xe78b9f+_0x51a112(0x10c)+(_0x38dfa3?_0x57db0b['masterDetail']['foreignKey']:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20model\x20composite\x20update\x20method\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x493ee2+_0x51a112(0x13c)+_0x20e0e2+_0x51a112(0x12e)+_0x5f1e5e+_0x51a112(0x249)+_0x5f1e5e+_0x51a112(0xcf)+_0x20e0e2+_0x51a112(0x272)+(_0x38dfa3?'\x20(with\x20detail\x20items)':'')+_0x51a112(0x13f)+_0x20e0e2+_0x51a112(0x138)+_0x20e0e2+_0x51a112(0xfd)+_0x20e0e2+_0x51a112(0xba);}function generateReadCompositeFunction(_0x4690cc,_0x328069,_0xee5445,_0x2cbf08=null){const _0x33b29a=a0_0x25cec5;if(!_0x2cbf08){const _0x5c73b3=FileUtils[_0x33b29a(0x11c)](_0x328069);_0x2cbf08=_0x5c73b3+'Model';}const _0x1fdc01=JSON['stringify'](_0xee5445[_0x33b29a(0x146)]||[]);return _0x33b29a(0x15c)+_0x4690cc+'/'+_0x328069+'/read-composite\x20-\x20Read\x20header\x20with\x20detail\x20items\x0arouter.post(\x27/read-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x328069+'/read-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20where\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0xee5445['primaryKey']||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20model\x20readComposite\x20method\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x2cbf08+_0x33b29a(0x210)+_0x328069+'\x20composite\x20read\x20successful:\x20${result.count\x20||\x200}\x20record(s)`);\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20read\x20'+_0x328069+_0x33b29a(0x14e)+_0x328069+'\x20composite\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateWorkflowFunction(_0x265ccc,_0x383900,_0x5b3b57,_0x1a0dcf=null){const _0x1db051=a0_0x25cec5;if(!_0x1a0dcf){const _0x4d98a7=FileUtils['toCamelCase'](_0x383900);_0x1a0dcf=_0x4d98a7+_0x1db051(0x20e);}const _0x20788a=_0x5b3b57['workflow']?JSON['stringify'](_0x5b3b57['workflow']):'{}',_0x691251=_0x5b3b57['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x1a0dcf+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20recordId\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x383900+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return'\x0a//\x20POST\x20/api/'+_0x265ccc+'/'+_0x383900+'/change-status\x20-\x20Change\x20status\x20'+_0x383900+_0x1db051(0x288)+(_0x5b3b57[_0x1db051(0x107)]||'id')+_0x1db051(0x28c)+_0x691251+_0x1db051(0x284)+_0x20788a+';\x0a\x20\x20\x20\x20workflowConfig._project\x20=\x20\x27'+_0x265ccc+_0x1db051(0x197)+_0x5b3b57[_0x1db051(0x152)]+_0x1db051(0x18e)+_0x1a0dcf+'.changeStatusData(req.body,\x20workflowConfig,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20component\x20engine\x20events\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x1a0dcf+'.changeStatusData(req.body,\x20workflowConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20CHANGE-STATUS\x20completed\x20without\x20component\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x383900+_0x1db051(0x1ad)+_0x383900+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Status\x20transition\x20not\x20allowed\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422\x20||\x20error.message.includes(\x27Cannot\x20change\x20status\x27)\x20||\x20error.message.includes(\x27No\x20transitions\x20defined\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Status\x20transition\x20not\x20allowed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Concurrent\x20modification\x20(optimistic\x20concurrency\x20check\x20via\x20status\x20guard\x20clause)\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27WORKFLOW_CONCURRENT_MODIFICATION\x27\x20||\x20error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Concurrent\x20modification\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validation\x20errors\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27is\x20required\x20for\x27)\x20||\x20error.message.includes(\x27is\x20not\x20a\x20valid\x20field\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hook\x20execution\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27hook\x20failed\x27)\x20||\x20error.message.includes(\x27onBefore\x27)\x20||\x20error.message.includes(\x27onAfter\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(502).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Workflow\x20hook\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Record\x20not\x20found\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Record\x20not\x20found\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x383900+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Lock\x20acquisition\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27Failed\x20to\x20acquire\x20lock\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Resource\x20busy\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20changing\x20status\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a';}function createPostgresSubmoduleTemplate(_0x1ffe42,_0x1eb0b2,_0x333d27){const _0x556dde=a0_0x25cec5,_0x279292={'Jiblb':function(_0x414de6,_0x9886d4){return _0x414de6===_0x9886d4;},'VQFcl':function(_0xe4d899,_0x3d5936,_0x39a1e2,_0x15415f,_0x33694d,_0x262cdc,_0x59d53b,_0x1c9e14){return _0xe4d899(_0x3d5936,_0x39a1e2,_0x15415f,_0x33694d,_0x262cdc,_0x59d53b,_0x1c9e14);},'gmCxr':_0x556dde(0xed),'czyMH':function(_0x1f8cd7,_0x375400){return _0x1f8cd7(_0x375400);},'aSyWH':'\x27,\x20\x27','ZuOYg':function(_0x1473f4,_0x20b853){return _0x1473f4!==_0x20b853;}},_0xd8f1b4=FileUtils['toPascalCase'](_0x1eb0b2),_0x17b957=new Date()['toISOString']()[_0x556dde(0x20d)]('T','\x20')[_0x556dde(0x20d)](/\.\d{3}Z$/,''),_0x324149=_0x333d27['_extendedFields']||{'all':_0x333d27[_0x556dde(0x146)]||[]},_0x595d74=FileUtils['detectTextColumn'](_0x333d27['fieldName']||[]),_0xb05a2e=FileUtils['toCamelCase'](_0x1eb0b2),_0x3cc1a2=_0xb05a2e+_0x556dde(0x20e),_0x351bce=_0x333d27['kafka']&&_0x279292[_0x556dde(0x1b4)](_0x333d27[_0x556dde(0x26c)][_0x556dde(0x15b)],!![]),_0x127983=_0x279292[_0x556dde(0x291)](buildEndpointFunctions,_0x1ffe42,_0x1eb0b2,_0x333d27,_0x324149,_0x595d74,_0x3cc1a2,_0x351bce),_0x4e29ce=_0x351bce?'\x0a//\x20Kafka\x20Producer\x20Service\x20untuk\x20event\x20publishing\x0alet\x20kafkaService\x20=\x20null;\x0atry\x20{\x0a\x20\x20kafkaService\x20=\x20require(\x27@restforgejs/platform/src/services/kafkaService\x27).getInstance();\x0a}\x20catch\x20(e)\x20{\x0a\x20\x20console.error(\x27CRITICAL:\x20Kafka\x20service\x20failed\x20to\x20load\x20but\x20Kafka\x20publishing\x20is\x20configured:\x27,\x20e.message);\x0a\x20\x20throw\x20e;\x0a}\x0a\x0a//\x20Kafka\x20configuration\x20dari\x20payload\x0aconst\x20kafkaConfig\x20=\x20'+JSON[_0x556dde(0xb7)](_0x333d27[_0x556dde(0x26c)]||{'enabled':![]})+';\x0a':'';return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x3cc1a2+'\x20=\x20require(\x27../../models/'+_0x1ffe42+'/'+_0x1eb0b2+_0x556dde(0x247)+_0x4e29ce+_0x556dde(0x11d)+JSON['stringify'](_0x333d27[_0x556dde(0x142)])+_0x556dde(0x299)+JSON['stringify'](_0x333d27[_0x556dde(0x142)])+_0x556dde(0xbb)+JSON['stringify'](_0x333d27['components'])+_0x556dde(0x235)+_0x333d27[_0x556dde(0x152)]+_0x556dde(0xe4)+JSON[_0x556dde(0xb7)](_0x333d27[_0x556dde(0x146)])+',\x0a\x20\x20\x20\x20\x20\x20exportQuery:\x20'+(_0x333d27['exportQuery']?'\x27'+_0x333d27[_0x556dde(0x22a)]+'\x27':'null')+',\x0a\x20\x20\x20\x20\x20\x20columnFormats:\x20'+(_0x333d27[_0x556dde(0x24a)]?JSON['stringify'](_0x333d27['columnFormats']):'null')+_0x556dde(0x292)+(_0x333d27[_0x556dde(0x22f)]?JSON[_0x556dde(0xb7)](_0x333d27['fieldLabels']):_0x556dde(0xed))+',\x0a\x20\x20\x20\x20\x20\x20components:\x20'+JSON['stringify'](_0x333d27[_0x556dde(0x142)])+',\x0a\x20\x20\x20\x20\x20\x20importConfig:\x20'+(_0x333d27['importConfig']?JSON['stringify'](_0x333d27[_0x556dde(0xe8)]):_0x279292['gmCxr'])+_0x556dde(0x22c)+(_0x333d27['adjustConfig']?JSON[_0x556dde(0xb7)](_0x333d27['adjustConfig']):'null')+',\x0a\x20\x20\x20\x20\x20\x20workflowConfig:\x20'+(_0x333d27['workflow']?JSON[_0x556dde(0xb7)](_0x333d27['workflow']):'null')+',\x0a\x20\x20\x20\x20\x20\x20uploadConfig:\x20'+(_0x333d27[_0x556dde(0x1c2)]?JSON['stringify'](_0x333d27['uploadConfig']):'null')+',\x0a\x20\x20\x20\x20\x20\x20requestScope:\x20'+(_0x333d27['requestScope']?JSON['stringify'](_0x333d27['requestScope']):_0x279292[_0x556dde(0x268)])+_0x556dde(0x202)+_0x1ffe42+'/'+_0x1eb0b2+':\x20${result.componentsLoaded}\x20components`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}).catch(err\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20load\x20component\x20configuration\x20for\x20'+_0x1ffe42+'/'+_0x1eb0b2+':`,\x20err.message);\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a}\x20catch\x20(e)\x20{\x0a\x20\x20if\x20(hasComponents)\x20{\x0a\x20\x20\x20\x20//\x20Components\x20dikonfigurasi\x20tapi\x20engine\x20gagal\x20load\x20—\x20ini\x20error,\x20bukan\x20optional\x0a\x20\x20\x20\x20console.error(`CRITICAL:\x20Component\x20engine\x20failed\x20to\x20load\x20for\x20'+_0x1ffe42+'/'+_0x1eb0b2+_0x556dde(0x221)+_0x1ffe42+'/'+_0x1eb0b2+',\x20running\x20without\x20events`);\x0a}\x0a\x0a/**\x0a\x20*\x20'+_0xd8f1b4+_0x556dde(0x188)+_0x17b957+'\x0a\x20*\x0a\x20*\x20Endpoints\x20untuk\x20'+_0x1eb0b2+'\x20dengan\x20actions:\x20'+_0x279292['czyMH'](getEnabledActions,_0x333d27)[_0x556dde(0x117)](',\x20')+'\x0a\x20*\x20Table:\x20'+_0x333d27[_0x556dde(0x152)]+'\x0a\x20*\x20Fields:\x20'+(_0x333d27['fieldName']?_0x333d27[_0x556dde(0x146)]['length']:0x0)+'\x20fields\x0a\x20*\x20Database:\x20PostgreSQL\x0a\x20*/\x0a\x0a//\x20CORS\x20ditangani\x20di\x20level\x20app\x20oleh\x20cors\x20middleware\x20(lihat\x20konfigurasi\x20CORS_ENABLED\x20dan\x20CORS_ORIGINS\x20di\x20.env)\x0a\x0a\x0a\x0a//\x20Middleware\x20untuk\x20validasi\x20payload\x20pada\x20metode\x20POST\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20===\x20\x27POST\x27)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Skip\x20validation\x20untuk\x20import\x20routes\x20(menggunakan\x20multipart/form-data,\x20bukan\x20JSON)\x0a\x20\x20\x20\x20\x20\x20if\x20(req.path.startsWith(\x27/import-\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20next();\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20umum\x20untuk\x20payload\x0a\x20\x20\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20\x27/api/'+_0x1ffe42+'/'+_0x1eb0b2+'\x27\x20+\x20req.path\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20spesifik\x20untuk\x20endpoint\x20tertentu\x0a\x20\x20\x20\x20\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x20//\x20menghapus\x20/\x20di\x20awal\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20get\x20membutuhkan\x20where\x20dalam\x20format\x20{key,\x20value}\x20atau\x20[{key,\x20value}]\x20(1\x20elemen)\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27first\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20->\x20object\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20must\x20be\x20a\x20single\x20condition\x20{key,\x20value}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20delete\x20membutuhkan\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27\x20&&\x20(!req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27DELETE\x20payload\x20must\x20include\x20a\x20where\x20property\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20add\x20membutuhkan\x20data\x20yang\x20valid\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27add\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Filter\x20field\x20yang\x20memiliki\x20autoGenerate\x20dari\x20required\x20check\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20autoGenerateFields\x20=\x20'+(_0x333d27['fieldValidation']?JSON['stringify'](_0x333d27[_0x556dde(0x105)][_0x556dde(0x147)](_0x39456b=>_0x39456b['constraints']&&_0x39456b[_0x556dde(0x1f7)][_0x556dde(0x11a)])['map'](_0x2bc9a6=>_0x2bc9a6[_0x556dde(0xe6)])):'[]')+';\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20requiredFields\x20=\x20[\x27'+_0x333d27['fieldName']['filter'](_0x3b1397=>_0x3b1397!=='id')['slice'](0x0,0x1)['join'](_0x279292[_0x556dde(0x1f3)])+_0x556dde(0x211)+(_0x333d27['primaryKey']||'id')+'\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20payload\x20for\x20${req.path}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20next();\x0a});\x0a'+buildRequestScopeMiddleware(_0x333d27,_0x1eb0b2)+buildSoftDeleteReadMiddleware(_0x333d27)+'\x0a'+_0x127983+'\x0a\x0a'+(_0x279292[_0x556dde(0xe5)](_0x333d27[_0x556dde(0xbd)]?.[_0x556dde(0x270)],![])?'//\x20Endpoint\x20info\x20—\x20self-documenting\x20API\x0arouter.get(\x27/info\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20actions\x20=\x20'+JSON['stringify']({'datatables':!!_0x333d27[_0x556dde(0xbd)]?.[_0x556dde(0x20f)],'read':!!_0x333d27[_0x556dde(0xbd)]?.['read'],'first':!!_0x333d27['action']?.['first'],'create':!!_0x333d27['action']?.[_0x556dde(0x1c8)],'update':!!_0x333d27['action']?.['update'],'delete':!!_0x333d27['action']?.[_0x556dde(0x26b)],'lookup':!!_0x333d27[_0x556dde(0xbd)]?.[_0x556dde(0x14d)],'export':!!_0x333d27['action']?.[_0x556dde(0x135)],'import':!!_0x333d27[_0x556dde(0xbd)]?.['import'],'workflow':!!_0x333d27['action']?.[_0x556dde(0x286)],'info':_0x333d27[_0x556dde(0xbd)]?.[_0x556dde(0x270)]!==![]})+';\x0a\x0a\x20\x20\x20\x20const\x20modelInfo\x20=\x20await\x20'+_0x3cc1a2+'.getModelInfo(actions);\x0a\x0a\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0x1eb0b2+'\x27,\x0a\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x1ffe42+_0x556dde(0x1be)+_0x17b957+_0x556dde(0x186)+_0x1eb0b2+_0x556dde(0x218):'//\x20Endpoint\x20/info\x20dinonaktifkan\x20via\x20action.info\x20=\x20false')+'\x0a\x0a//\x20Health\x20check\x20endpoint\x0arouter.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20res.json({\x0a\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20endpoint:\x20\x27'+_0x1eb0b2+'\x27,\x0a\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20});\x0a});\x0a\x0amodule.exports\x20=\x20router;';}function createPostgresMainModuleTemplate(_0x500a1d){const _0x26ee61=a0_0x25cec5,_0x449c13=FileUtils[_0x26ee61(0x260)](_0x500a1d),_0x56575b=FileUtils[_0x26ee61(0x11c)](_0x500a1d),_0x3c3d72=new Date()[_0x26ee61(0x1c7)]()[_0x26ee61(0x20d)]('T','\x20')[_0x26ee61(0x20d)](/\.\d{3}Z$/,'');return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20bodyParser\x20=\x20require(\x27body-parser\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0aconst\x20{\x20logger,\x20logServerReady,\x20logEndpointRegistered,\x20createRequestLogger,\x20logRequest\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/logger\x27);\x0aconst\x20ExportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/export_handler\x27);\x0aconst\x20ImportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/import_handler\x27);\x0aconst\x20UploadHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/upload_handler\x27);\x0aconst\x20{\x20extractExportConfigFromEndpoint,\x20extractImportConfigFromEndpoint,\x20extractUploadConfigFromEndpoint\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/config-extractor\x27);\x0aconst\x20rateLimiter\x20=\x20require(\x27@restforgejs/platform/src/middleware/rate-limiter\x27);\x0aconst\x20idempotencyMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/idempotency\x27);\x0aconst\x20bodyOptionsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/body-options\x27);\x0aconst\x20corsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/cors\x27);\x0aconst\x20securityHeaders\x20=\x20require(\x27@restforgejs/platform/src/middleware/security-headers\x27);\x0a\x0a/**\x0a\x20*\x20'+_0x449c13+_0x26ee61(0x16b)+_0x3c3d72+_0x26ee61(0xbf)+_0x500a1d+_0x26ee61(0x1ba)+_0x449c13+_0x26ee61(0x250)+_0x500a1d+_0x26ee61(0x1c4)+_0x500a1d+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uptime:\x20process.uptime(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20memory:\x20process.memoryUsage(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20system:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20platform:\x20process.platform,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nodeVersion:\x20process.version,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pid:\x20process.pid\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json(healthInfo);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Module-specific\x20health\x20check\x20endpoint\x20(dengan\x20prefix\x20module)\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/api/'+_0x500a1d+'/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x500a1d+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uptime:\x20process.uptime(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20memory:\x20process.memoryUsage(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20system:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20platform:\x20process.platform,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nodeVersion:\x20process.version,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pid:\x20process.pid\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json(healthInfo);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Service\x20info\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/api/'+_0x500a1d+'/info\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name:\x20\x27'+_0x449c13+_0x26ee61(0x1e2)+_0x500a1d+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20documentation:\x20\x27See\x20individual\x20endpoint\x20documentation\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x3c3d72+'\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Load\x20dan\x20register\x20endpoint\x20modules\x0a\x20\x20\x20\x20\x20\x20//\x20Binary-compatible:\x20Use\x20working\x20directory\x20instead\x20of\x20__dirname\x0a\x20\x20\x20\x20\x20\x20const\x20isBunCompiled\x20=\x20typeof\x20Bun\x20!==\x20\x27undefined\x27\x20&&\x20!process.argv[1];\x0a\x20\x20\x20\x20\x20\x20const\x20getWorkingDir\x20=\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20running\x20as\x20compiled\x20binary\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isBunCompiled)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Running\x20as\x20compiled\x20binary:\x20use\x20directory\x20where\x20binary\x20is\x20located\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20path.dirname(process.execPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Running\x20as\x20Node.js/Bun\x20script:\x20__dirname\x20is\x20already\x20in\x20src/modules\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20So\x20we\x20just\x20need\x20to\x20add\x20the\x20module\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20__dirname;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20workingDir\x20=\x20getWorkingDir();\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20compiled\x20binary:\x20workingDir\x20is\x20binary\x20directory,\x20need\x20full\x20path\x20src/modules/moduleName\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20script:\x20workingDir\x20is\x20already\x20src/modules/,\x20just\x20add\x20moduleName\x0a\x20\x20\x20\x20\x20\x20const\x20modulesDir\x20=\x20isBunCompiled\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20path.join(workingDir,\x20\x27src\x27,\x20\x27modules\x27,\x20\x27'+_0x500a1d+'\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20path.join(workingDir,\x20\x27'+_0x500a1d+'\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ensure\x20modules\x20directory\x20exists\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!fs.existsSync(modulesDir))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fs.mkdirSync(modulesDir,\x20{\x20recursive:\x20true\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Created\x20modules\x20directory:\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Read\x20dan\x20load\x20semua\x20endpoint\x20files\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20fs.readdirSync(modulesDir);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointFiles\x20=\x20files.filter(file\x20=>\x20file.endsWith(\x27.js\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(endpointFiles.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`No\x20endpoint\x20files\x20found\x20in\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Add\x20endpoint\x20files\x20to\x20enable\x20API\x20functionality`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27endpoints_loading\x27,\x20count:\x20endpointFiles.length\x20},\x20`Loading\x20${endpointFiles.length}\x20endpoint(s)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20setiap\x20endpoint\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20file\x20of\x20endpointFiles)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointName\x20=\x20path.basename(file,\x20\x27.js\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPath\x20=\x20path.join(modulesDir,\x20file);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Clear\x20module\x20cache\x20untuk\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(require.cache[endpointPath])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete\x20require.cache[endpointPath];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointRouter\x20=\x20require(endpointPath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!endpointRouter)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.warn(`Endpoint\x20${endpointName}\x20did\x20not\x20export\x20a\x20router`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20endpoint\x20dengan\x20prefix\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPrefix\x20=\x20`/api/'+_0x500a1d+_0x26ee61(0x1e6)+_0x500a1d+'\x27,\x20endpointName,\x20exportConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(exportError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27export_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20exportError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Export\x20registration\x20failed\x20for\x20${endpointName}:\x20${exportError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20import\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20importConfig\x20=\x20extractImportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(importConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ImportHandler.registerRoutes(app,\x20\x27'+_0x500a1d+_0x26ee61(0x1d0)+_0x500a1d+'\x27,\x20endpointName,\x20uploadConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields:\x20Object.keys(uploadConfig.fields\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(uploadError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20uploadError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20registration\x20failed\x20for\x20${endpointName}:\x20${uploadError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(endpointError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20endpoint\x20${file}:`,\x20endpointError.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Continue\x20loading\x20other\x20endpoints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(dirError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20reading\x20modules\x20directory\x20${modulesDir}:`,\x20dirError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20cleanup\x20route\x20(optional\x20admin\x20endpoint)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27cleanup_route_error\x27,\x20error:\x20cleanupError.message\x20},\x20\x27Export\x20cleanup\x20route\x20registration\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20root\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20404\x20handler\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20workbench\x20UI\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20404\x20handler\x20untuk\x20unknown\x20routes\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Global\x20Error\x20Handler\x20-\x20${req.method}\x20${req.url}:`,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20other\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20statusCode\x20=\x20err.statusCode\x20||\x20err.status\x20||\x20500;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20errorResponse\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20err.name\x20||\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20err.message\x20||\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20stack\x20trace\x20in\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20!==\x20\x27production\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errorResponse.stack\x20=\x20err.stack;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(statusCode).json(errorResponse);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Start\x20server\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x500a1d+_0x26ee61(0x248)+_0x500a1d+'/health`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20serviceInfo:\x20`http://${displayHost}:${port}/api/'+_0x500a1d+'/info`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseUrl:\x20`http://${displayHost}:${port}`\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Execute\x20plugin\x20onAfterServerStart\x20hook\x20(jika\x20ada)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin\x20&&\x20plugin.onAfterServerStart)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onAfterServerStart(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_after_start_error\x27,\x20error:\x20pluginError.message\x20},\x20\x27Plugin\x20onAfterServerStart\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Graceful\x20shutdown\x20handling\x0a\x20\x20\x20\x20\x20\x20const\x20gracefulShutdown\x20=\x20(signal)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`\x5cnReceived\x20${signal},\x20starting\x20graceful\x20shutdown...`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20server.close((err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20during\x20server\x20shutdown:\x27,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Server\x20closed\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Goodbye!\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Force\x20shutdown\x20after\x2010\x20seconds\x0a\x20\x20\x20\x20\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Forced\x20shutdown\x20after\x20timeout\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x2010000);\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20shutdown\x20signals\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGINT\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGINT\x27));\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGTERM\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGTERM\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20uncaught\x20exceptions\x0a\x20\x20\x20\x20\x20\x20process.on(\x27uncaughtException\x27,\x20(error)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Uncaught\x20Exception:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27uncaughtException\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20process.on(\x27unhandledRejection\x27,\x20(reason,\x20promise)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Unhandled\x20Rejection\x20at:\x27,\x20promise,\x20\x27reason:\x27,\x20reason);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27unhandledRejection\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Store\x20server\x20reference\x20untuk\x20testing/management\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onServerReady\x20&&\x20typeof\x20config.onServerReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onServerReady(server,\x20app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Fatal\x20error\x20in\x20${moduleNameCapitalized}\x20module:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20reject(error);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Promise\x20tidak\x20akan\x20pernah\x20resolve\x20untuk\x20menjaga\x20server\x20tetap\x20berjalan\x0a\x20\x20\x20\x20//\x20kecuali\x20ada\x20error\x20atau\x20shutdown\x20signal\x0a\x20\x20});\x0a}\x0a\x0a//\x20Export\x20execute\x20function\x0amodule.exports\x20=\x20{\x20execute\x20};\x0a\x0a//\x20Additional\x20exports\x20untuk\x20testing\x20dan\x20management\x0amodule.exports.'+_0x56575b+_0x26ee61(0x264)+_0x500a1d+'\x27;\x0amodule.exports.generated\x20=\x20\x27'+_0x3c3d72+'\x27;';}module['exports']={'createPostgresModelTemplate':createPostgresModelTemplate,'createPostgresSubmoduleTemplate':createPostgresSubmoduleTemplate,'createPostgresMainModuleTemplate':createPostgresMainModuleTemplate};