1
0
-1

I am integrating ServiceNow and ADO so the Project Owners/Managers and the developers can share some information back and forth in their chosen tools.  In Service now there are Programs that have Demand records associated with them. We created a custom workitem type in ADO for Demands and we would like to link them to Epics such that an Epic could have a Demand as an associated workitem.

ServiceNow <=> ADO

Project    ==  Epic

Project Task    ==  Feature


and


in SNOW, Projects have related Project Tasks 


In ADO Epics have related Features


Here's the question:


These records will originate in ServiceNow and be replicated to ADO. When we create a Project Task under a Project in ServiceNow, how can I then replicate that relationship status to ADO? 

I have attempted the following and it fails regardless of what values I use as the identifier unless I hardcode the ADO workItem number in which case it does work.


outgoing sync for pm_project_task in SNow has the following:

 replica.parent_Id       = entity.parent


which shows in the replica as:

    "parent_Id": {
      "display_value": "PRJ0012345",
      "link": "https://Company.service-now.com/api/now/v2/table/task/37d73128db0c8154e12345d7f4961982",
      "scala$collection$convert$Wrappers$MapWrapper$$underlying": {}
    },

I have tried putting the following in place of the <identifier> below but my value is always null. I know all records are in sync ahead of this too:

parent_Id
parent_Id.display_value      
parent_Id.link
    if(replica.parent_Id){
        def localParent  =  syncHelper.getLocalIssueKeyFromRemoteId(<identifier>)
        workItem."Custom.TechnicalandArchitectureDetails" = localParent.toString() //just to echo the output so I can "see" it
        workItem.parentId = localParent.toString() 
    }

Could it be that this helper just doesn't work with the ServiceNow datatype?


Help? 

  1. Ariel Aguilar

    Hi Jack,

    Have you tried:

        if(replica.parent_Id){
            def localParent  =  syncHelper.getLocalIssueKeyFromRemoteId(replica.parent_Id.toLong())
            workItem."Custom.TechnicalandArchitectureDetails" = localParent.toString() //just to echo the output so I can "see" it
            workItem.parentId = localParent.toString() 
        }

    Kind regards,

    Ariel

  2. Jack Handy

    I tried this initially but it always failed for me. Here's what I entered:

    if(replica.parent_Id){
     def parent=syncHelper.getLocalIssueKeyFromRemoteId(replica.parent_Id.toLong())
     workItem."Custom.TechnicalandArchitectureDetails" = parent
     workItem.parentId = parent
     }

    And this is what it returned for the "def parent=syncHelper.getLocalIssueKeyFromRemoteId..." line


    Error Detail Message:
    No signature of method: com.google.gson.internal.LinkedTreeMap.toLong() is applicable for argument types: () values: [] Possible solutions: toString(), toString(), toString(), toString(), count(groovy.lang.Closure), notify()


    Error Stack Trace
    com.exalate.api.exception.script.ScriptException: No signature of method: com.google.gson.internal.LinkedTreeMap.toLong() is applicable for argument types: () values: [] Possible solutions: toString(), toString(), toString(), toString(), count(groovy.lang.Closure), notify() at com.exalate.error.services.ScriptExceptionCategoryService.categorizeProcessorAndIssueTrackerExceptionsIntoScriptExceptions(ScriptExceptionCategoryService.scala:40) at com.exalate.processor.ExalateProcessor.executeProcessor(ExalateProcessor.java:57) at com.exalate.replication.services.processor.CreateIssueProcessor.$anonfun$executeScriptRules$1(CreateIssueProcessor.scala:124) at scala.util.Try$.apply(Try.scala:213) at com.exalate.replication.services.processor.CreateIssueProcessor.executeScriptRules(CreateIssueProcessor.scala:121) at com.exalate.replication.services.processor.CreateIssueProcessor.createIssue(CreateIssueProcessor.scala:83) at com.exalate.replication.services.replication.request.CreateIssueSyncRequestState.transition(CreateIssueSyncRequestState.scala:42) at com.exalate.replication.services.replication.request.CreateIssueSyncRequestState.transition(CreateIssueSyncRequestState.scala:21) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequest$2(RequestProcessorService.scala:185) at scala.util.Try$.apply(Try.scala:213) at com.exalate.replication.services.replication.in.RequestProcessorService.processSyncRequest(RequestProcessorService.scala:162) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequestsForIssue$1(RequestProcessorService.scala:112) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequestsForIssue$1$adapted(RequestProcessorService.scala:111) at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126) at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122) at scala.collection.immutable.List.foldLeft(List.scala:91) at com.exalate.replication.services.replication.in.RequestProcessorService.processSyncRequestsForIssue(RequestProcessorService.scala:111) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$7(RequestProcessorService.scala:74) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$7$adapted(RequestProcessorService.scala:74) at scala.collection.immutable.List.foreach(List.scala:431) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$2(RequestProcessorService.scala:74) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$2$adapted(RequestProcessorService.scala:56) at scala.collection.Iterator.foreach(Iterator.scala:943) at scala.collection.Iterator.foreach$(Iterator.scala:943) at scala.collection.AbstractIterator.foreach(Iterator.scala:1431) at scala.collection.IterableLike.foreach(IterableLike.scala:74) at scala.collection.IterableLike.foreach$(IterableLike.scala:73) at scala.collection.AbstractIterable.foreach(Iterable.scala:56) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$1(RequestProcessorService.scala:56) at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$1$adapted(RequestProcessorService.scala:56) at scala.collection.Iterator.foreach(Iterator.scala:943) at scala.collection.Iterator.foreach$(Iterator.scala:943) at scala.collection.AbstractIterator.foreach(Iterator.scala:1431) at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:974) at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:53) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:67) at scala.collection.parallel.Task.tryLeaf(Tasks.scala:56) at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:50) at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:971) at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:153) at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:149) at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440) at java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) Caused by: javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: com.google.gson.internal.LinkedTreeMap.toLong() is applicable for argument types: () values: [] Possible solutions: toString(), toString(), toString(), toString(), count(groovy.lang.Closure), notify() at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:158) at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) at com.exalate.processor.ExalateProcessor.execute(ExalateProcessor.java:98) at com.exalate.processor.ExalateProcessor.executeProcessor(ExalateProcessor.java:55) ... 47 more Caused by: javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: com.google.gson.internal.LinkedTreeMap.toLong() is applicable for argument types: () values: [] Possible solutions: toString(), toString(), toString(), toString(), count(groovy.lang.Closure), notify() at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:155) ... 50 more Caused by: groovy.lang.MissingMethodException: No signature of method: com.google.gson.internal.LinkedTreeMap.toLong() is applicable for argument types: () values: [] Possible solutions: toString(), toString(), toString(), toString(), count(groovy.lang.Closure), notify() at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:70) at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:119) at Script63.run(Script63.groovy:150) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317) ... 51 more

    My suspicion is that toLong() is choking on the result because it's expecting a number and the result in either a URL or a value like "PRJ0012345" 

  3. Daniel Carvajal

    Hi Jack

    I think your suspicion is correct, can you try changing that line to:

    def parent=syncHelper.getLocalIssueKeyFromRemoteId(replica.parent_Id.toString())

    Let us know the outcome.

    Cheers,

    Daniel

  4. Jack Handy

    Throws the following:

     Impact: RELATIONLocal entity: nullRemote entity: PRJTASK0014062Connection: Analytics_to_SNowError type: Incoming script errorError Creation Time: Dec 14, 2021 19:08:09Error Detail Message: No signature of method: com.google.gson.internal.LinkedTreeMap.display_value() is applicable for argument types: () values: [] Error Stack Trace: com.exalate.api.exception.script.ScriptException: No signature of method: com.google.gson.internal.LinkedTreeMap.display_value() is applicable for argument types: () values: []
    	at com.exalate.error.services.ScriptExceptionCategoryService.categorizeProcessorAndIssueTrackerExceptionsIntoScriptExceptions(ScriptExceptionCategoryService.scala:40)
    	at com.exalate.processor.ExalateProcessor.executeProcessor(ExalateProcessor.java:57)
    	at com.exalate.replication.services.processor.CreateIssueProcessor.$anonfun$executeScriptRules$1(CreateIssueProcessor.scala:124)
    	at scala.util.Try$.apply(Try.scala:213)
    	at com.exalate.replication.services.processor.CreateIssueProcessor.executeScriptRules(CreateIssueProcessor.scala:121)
    	at com.exalate.replication.services.processor.CreateIssueProcessor.createIssue(CreateIssueProcessor.scala:83)
    	at com.exalate.replication.services.replication.request.CreateIssueSyncRequestState.transition(CreateIssueSyncRequestState.scala:42)
    	at com.exalate.replication.services.replication.request.CreateIssueSyncRequestState.transition(CreateIssueSyncRequestState.scala:21)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequest$2(RequestProcessorService.scala:185)
    	at scala.util.Try$.apply(Try.scala:213)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.processSyncRequest(RequestProcessorService.scala:162)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequestsForIssue$1(RequestProcessorService.scala:112)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequestsForIssue$1$adapted(RequestProcessorService.scala:111)
    	at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
    	at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
    	at scala.collection.immutable.List.foldLeft(List.scala:91)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.processSyncRequestsForIssue(RequestProcessorService.scala:111)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$7(RequestProcessorService.scala:74)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$7$adapted(RequestProcessorService.scala:74)
    	at scala.collection.immutable.List.foreach(List.scala:431)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$2(RequestProcessorService.scala:74)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$2$adapted(RequestProcessorService.scala:56)
    	at scala.collection.Iterator.foreach(Iterator.scala:943)
    	at scala.collection.Iterator.foreach$(Iterator.scala:943)
    	at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
    	at scala.collection.IterableLike.foreach(IterableLike.scala:74)
    	at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
    	at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$1(RequestProcessorService.scala:56)
    	at com.exalate.replication.services.replication.in.RequestProcessorService.$anonfun$processSyncRequests$1$adapted(RequestProcessorService.scala:56)
    	at scala.collection.Iterator.foreach(Iterator.scala:943)
    	at scala.collection.Iterator.foreach$(Iterator.scala:943)
    	at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
    	at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:974)
    	at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:53)
    	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    	at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:67)
    	at scala.collection.parallel.Task.tryLeaf(Tasks.scala:56)
    	at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:50)
    	at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:971)
    	at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:153)
    	at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:149)
    	at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440)
    	at java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
    Caused by: javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: com.google.gson.internal.LinkedTreeMap.display_value() is applicable for argument types: () values: []
    	at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:158)
    	at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
    	at com.exalate.processor.ExalateProcessor.execute(ExalateProcessor.java:98)
    	at com.exalate.processor.ExalateProcessor.executeProcessor(ExalateProcessor.java:55)
    	... 47 more
    Caused by: javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: com.google.gson.internal.LinkedTreeMap.display_value() is applicable for argument types: () values: []
    	at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)
    	at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:155)
    	... 50 more
    Caused by: groovy.lang.MissingMethodException: No signature of method: com.google.gson.internal.LinkedTreeMap.display_value() is applicable for argument types: () values: []
    	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:70)
    	at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)
    	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
    	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:119)
    	at Script15.run(Script15.groovy:169)
    	at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)
    	... 51 more
    Incoming sync data:  Summary:  Task for PRJTASK0014062Entity Key:  PRJTASK0014062(id: undefined)Encoded payload:  eyJ2ZXJzaW9uIjp7Im1ham9yIjoxLCJtaW5vciI6MTQsInBhdGNoIjowfSwiaHViSXNzdWUiOnsicHJpb3JpdHlOYW1lIjoiNCAtIExvdyIsIkNyZWF0ZWRCeSI6IkphY2suSGFuZHlAYmlzc2VsbC5jb20iLCJXb3JrRW5kIjoiIiwiRW5kRGF0ZSI6IjIwMjEtMTItMDIgMTc6MDA6MDAiLCJTdGFydERhdGUiOiIyMDIxLTEyLTAyIDA4OjAwOjAwIiwidXJnZW5jeSI6IjMgLSBMb3ciLCJhc3NpZ25tZW50R3JvdXAiOnsiZGlzcGxheV92YWx1ZSI6IkFuYWx5dGljcyBUZWFtIiwibGluayI6Imh0dHBzOi8vYmlzc2VsbGRldi5zZXJ2aWNlLW5vdy5jb20vYXBpL25vdy92Mi90YWJsZS9zeXNfdXNlcl9ncm91cC8yNGU3Mzg3OWRiZTYxMzAwOGM3NTVlNjVjZTk2MTk3YSIsInNjYWxhJGNvbGxlY3Rpb24kY29udmVydCRXcmFwcGVycyRNYXBXcmFwcGVyJCR1bmRlcmx5aW5nIjp7fX0sInBhcmVudF9JZCI6eyJkaXNwbGF5X3ZhbHVlIjoiUFJKMDAxMzg1NyIsImxpbmsiOiJodHRwczovL2Jpc3NlbGxkZXYuc2VydmljZS1ub3cuY29tL2FwaS9ub3cvdjIvdGFibGUvdGFzay8wZWU0ZDFmYmRiODQ4NTk0ZWM4ZjBjZDdmNDk2MTliNiIsInNjYWxhJGNvbGxlY3Rpb24kY29udmVydCRXcmFwcGVycyRNYXBXcmFwcGVyJCR1bmRlcmx5aW5nIjp7fX0sIldvcmtTdGFydCI6IiIsInN0YXRlIjoiUGVuZGluZyIsImFyZWFQYXRoIjoiQW5hbHl0aWNzIERldmVsb3BtZW50IiwiYXNzaWduZWRfdG8iOnsiZGlzcGxheV92YWx1ZSI6IkphY2sgSGFuZHkiLCJsaW5rIjoiaHR0cHM6Ly9iaXNzZWxsZGV2LnNlcnZpY2Utbm93LmNvbS9hcGkvbm93L3YyL3RhYmxlL3N5c191c2VyLzkzYTY3OGZkZGJhNjEzMDA4Yzc1NWU2NWNlOTYxOTZhIiwic2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJE1hcFdyYXBwZXIkJHVuZGVybHlpbmciOnt9fSwiY29tcG9uZW50cyI6W10sImF0dGFjaG1lbnRzIjpbXSwidm90ZXJzIjpbXSwiY3VzdG9tRmllbGRzIjp7fSwiZGVzY3JpcHRpb24iOiJUaGlzIG9uZSBpcyBUSEUgb25lLiIsIndhdGNoZXJzIjpbXSwiZml4VmVyc2lvbnMiOltdLCJzdW1tYXJ5IjoiVGFzayBmb3IgUFJKVEFTSzAwMTQwNjIiLCJjb21tZW50cyI6W3siaWQiOiIzNTZkMWZhYmRiOWMwMTE4ZWM4ZjBjZDdmNDk2MTliYSIsImF1dGhvciI6eyJrZXkiOiJKYWNrLkhhbmR5QGJpc3NlbGwuY29tIiwiYWN0aXZlIjpmYWxzZSwiZGlzcGxheU5hbWUiOiJKYWNrLkhhbmR5QGJpc3NlbGwuY29tIiwidXNlcm5hbWUiOiJKYWNrLkhhbmR5QGJpc3NlbGwuY29tIn0sImJvZHkiOiJMaWtlIE5lbyBmcm9tIFRoZSBNYXRyaXgiLCJjcmVhdGVkIjoxNjM5NTA4Njg5MDAwLCJpbnRlcm5hbCI6dHJ1ZSwicmVzdHJpY3RTeW5jIjpmYWxzZX1dLCJpbnRlcm5hbE1hcCI6eyJwcmlvcml0eU5hbWUiOiI0IC0gTG93IiwiQ3JlYXRlZEJ5IjoiSmFjay5IYW5keUBiaXNzZWxsLmNvbSIsIldvcmtFbmQiOiIiLCJFbmREYXRlIjoiMjAyMS0xMi0wMiAxNzowMDowMCIsIlN0YXJ0RGF0ZSI6IjIwMjEtMTItMDIgMDg6MDA6MDAiLCJ1cmdlbmN5IjoiMyAtIExvdyIsImFzc2lnbm1lbnRHcm91cCI6eyJkaXNwbGF5X3ZhbHVlIjoiQW5hbHl0aWNzIFRlYW0iLCJsaW5rIjoiaHR0cHM6Ly9iaXNzZWxsZGV2LnNlcnZpY2Utbm93LmNvbS9hcGkvbm93L3YyL3RhYmxlL3N5c191c2VyX2dyb3VwLzI0ZTczODc5ZGJlNjEzMDA4Yzc1NWU2NWNlOTYxOTdhIiwic2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJE1hcFdyYXBwZXIkJHVuZGVybHlpbmciOnt9fSwicGFyZW50X0lkIjp7ImRpc3BsYXlfdmFsdWUiOiJQUkowMDEzODU3IiwibGluayI6Imh0dHBzOi8vYmlzc2VsbGRldi5zZXJ2aWNlLW5vdy5jb20vYXBpL25vdy92Mi90YWJsZS90YXNrLzBlZTRkMWZiZGI4NDg1OTRlYzhmMGNkN2Y0OTYxOWI2Iiwic2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJE1hcFdyYXBwZXIkJHVuZGVybHlpbmciOnt9fSwiV29ya1N0YXJ0IjoiIiwic3RhdGUiOiJQZW5kaW5nIiwiYXJlYVBhdGgiOiJBbmFseXRpY3MgRGV2ZWxvcG1lbnQiLCJhc3NpZ25lZF90byI6eyJkaXNwbGF5X3ZhbHVlIjoiSmFjayBIYW5keSIsImxpbmsiOiJodHRwczovL2Jpc3NlbGxkZXYuc2VydmljZS1ub3cuY29tL2FwaS9ub3cvdjIvdGFibGUvc3lzX3VzZXIvOTNhNjc4ZmRkYmE2MTMwMDhjNzU1ZTY1Y2U5NjE5NmEiLCJzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZyI6e319fSwicHJpb3JpdHkiOnsibmFtZSI6IjQgLSBMb3ciLCJkZXNjcmlwdGlvbiI6IiJ9LCJsYWJlbHMiOltdLCJjdXN0b21LZXlzIjp7fSwid29ya0xvZ3MiOltdLCJhZmZlY3RlZFZlcnNpb25zIjpbXSwic2V2ZXJpdHlOYW1lIjoiMyAtIExvdyIsImVudGl0eVByb3BlcnRpZXMiOnt9fSwiaXNzdWVVcmwiOiJodHRwczovL2Jpc3NlbGxkZXYuc2VydmljZS1ub3cuY29tL25hdl90by5kbz91cmk9cG1fcHJvamVjdF90YXNrLmRvP3N5c19pZD0zZjU4OGFjOGRiMTQwOTk0ZWM4ZjBjZDdmNDk2MTllNSJ9
CommentAdd your comment...