Language selection

Search

Patent 3028906 Summary

Third-party information liability

Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.

Claims and Abstract availability

Any discrepancies in the text and image of the Claims and Abstract are due to differing posting times. Text of the Claims and Abstract are posted:

  • At the time the application is open to public inspection;
  • At the time of issue of the patent (grant).
(12) Patent: (11) CA 3028906
(54) English Title: METHOD AND APPARATUS FOR PROMOTING SALES AND INCREASING BRAND NAME RECOGNITION
(54) French Title: METHODE ET APPAREIL DE PROMOTION DES VENTES ET D'AUGMENTATION DE LA RECONNAISSANCE DU NOM DE MARQUE
Status: Granted
Bibliographic Data
(51) International Patent Classification (IPC):
  • G06Q 30/02 (2012.01)
(72) Inventors :
  • DORIS, ERROL S., SR. (United States of America)
(73) Owners :
  • DORIS, ERROL S., SR. (United States of America)
(71) Applicants :
  • DORIS, ERROL S., SR. (United States of America)
(74) Agent: ANDREWS ROBICHAUD
(74) Associate agent:
(45) Issued: 2022-01-11
(22) Filed Date: 2019-01-04
(41) Open to Public Inspection: 2019-07-10
Examination requested: 2021-03-03
Availability of licence: N/A
(25) Language of filing: English

Patent Cooperation Treaty (PCT): No

(30) Application Priority Data:
Application No. Country/Territory Date
15/866,996 United States of America 2018-01-10

Abstracts

English Abstract

A method for promoting sales and increasing brand recognition is described. The method includes selecting a brand name based on customer purchases enumerated on a transaction receipt generated on basis of transactions performed by a particular customer. The brand name is then obfuscated. The customer is provided an application to be used in conjunction with the obfuscated brand name to try and complete the missing letters in the brand name. The customer is rewarded with an incentive for uncovering the brand name and in order to submit the solution the customer is obligated to provide demographic information.


French Abstract

Une méthode de promotion de ventes et damélioration de la reconnaissance de marque est décrite. La méthode comprend la sélection dun nom de marque en fonction des achats dun client énumérés sur un reçu de transaction généré à partir des transactions dun client donné. Le nom de marque est ensuite caviardé. Le client reçoit une application à utiliser conjointement au nom de marque caviardé pour tenter de fournir les lettres manquantes dans le nom. Le client est récompensé dun incitatif pour avoir deviné le nom de marque et, pour présenter la solution, il est obligé de fournir ses renseignements démographiques.

Claims

Note: Claims are shown in the official language in which they were submitted.


Claims:
1. A method for promoting sales and increasing brand recognition comprising:
selecting by a promotion administrator product categories at a website
administration
portal hosted on an administration server;
updating by the administration server a retailer database and a product
database;
selecting by the promotion administrator which brand will participate in a
promotion at a
retailer location and rewards associated with each promotion;
assigning by the administration server random alphanumeric codes to be used at
point of
sale terminals along with puzzles;
transmitting by the administration server to the retailer database promotion
information
including a set of codes and brand name puzzles to be printed on receipts;
selecting by one of the point of sale terminals, a brand name and alphanumeric
code from
the retailer database based on customer purchases;
printing by the one of the point of sale terminals a paper receipt which
includes a list of
purchases and a game piece wherein the game piece comprises the alphanumeric
code and a
selected puzzle;
downloading a game application on a device of a customer, wherein the game
application
is in communication with the administration server and the retailer database;
accepting by the game application the printed alphanumeric code from the paper
receipt;
displaying on the device the selected puzzle retrieved from the retailer
database;
wherein the customer enters letters into the device, thereby completing the
selected puzzle
during a required time period;
determining by the game application whether the customer completed the
selected puzzle
within the required time period by the game application comparing an entry of
the customer with
a solution to the selected puzzle;
Date Recue/Date Received 2021-07-28

verifying by the application that the customer solved the selected puzzle; and
when it is determined that the customer solved the selected puzzle, retrieving
by the
application from the administration server a prize depending on the entries in
the retailer
database, the prize selected by a prize administrator, and presenting by the
application the prize
to the customer.
2. The method as recited in claim I wherein the displaying step further
comprises selecting by
the game application one or more random letters to display thereby guiding the
customer in
solving the selected puzzle.
3. The method as recited in claim I wherein the prize retrieved from the
administration server
comprises a cross-merchandising offer based on current inventory levels as
determined by the
administration server after referring to the retailer database.
4. The method as recited in claim I wherein the website administration portal
comprises a
dashboard wherein the promotion administrator selects the number of products
and a brand
alphabet.
56
Date Recue/Date Received 2021-07-28

Description

Note: Descriptions are shown in the official language in which they were submitted.


METHOD AND AND APPARATUS FOR PROMOTING SALES AND INCREASING
BRAND NAME RECOGNITION
BACKGROUND OF THE INVENTION
1. Field of the Invention.
[01] This invention relates to a method for promoting brands at point of sale
scenarios, and more specifically, the invention uses cash register receipts
and coupons
as promotion vehicles for various well-known brand names.
2. Background of the Invention.
[02] Brick and mortar retailers process in access of 45 billion cash
register
transactions each year. There are more than 310,000 cash registers at these
retailer
locations in the United States.
[03] Millions of stock keeping units (SKUs) vie for shelf space in stores all
over
the world; all in an effort to expand brand recognition and therefore sales.
Retail chain
stores average about 45,000 SKU's per location. However, only so much space is

available in typical brick and mortar retail outlets. The average Big Box
retailer stocks
an inventory of between 90,000 and 120,000 items in warehouses. These items
are
sold exclusively by internet.
[04] A need exists in the art for a vehicle to expand brand exposure without
concomitant increase in allocation of shelf space. The vehicle should be
visible to every
purchaser visiting brick and mortar establishments. The vehicle should also
engage the
purchaser and ideally leverage that purchaser's penchant for certain products.
SUMMARY OF INVENTION
[05] An object of the invention is to provide cost effective brand exposure in

brick and mortar establishments that may overcome many of the disadvantages of
the
prior art.
[06] Another object of the present invention to provide a method for pre-
selling
revenue futures to retailers. A feature of the invention is the use of cash
register
CA 3028906 2019-01-04

-2-
receipts to leverage a purchaser's preference for certain products. An
advantage of the
invention is that retailers share in advertising proceeds that are generated
when the
cash register receipt is used as an advertising vehicle.
[07] Still another object of the present invention is increasing advertising
through purchaser incentives and participation. A feature of the invention is
using point
of sale advertising vehicles identifying buyer preferences to induce customers
to
participate in a contest. An advantage of the invention is that point of sale
vendor
support is provided in exchange for creating an attractive audience for brand
managers
of those retail outlets.
[08] Yet another object of the present invention is to increase exposure of
customer-preferred advertised brands by utilizing a fast response customer
experience
via a smart phone and other intelligent devices. To facilitate this use, the
customer will
utilize an "app" linking to a web portal displaying a game play incentive
program that
uses the brand names as features of the game play.
[09] Briefly, the invention provides a method for promoting sales and
increasing brand recognition, the method comprising selecting brand names of
products
based on customer purchases enumerated on a customer receipt, wherein a
specific
alpha-numeric sequence appears on that receipt; obfuscating one of said brand
names
on the customer receipt so as to induce a customer to attempt to guess the one
of said
brand name; and determining if the customer guessed correctly. Each winning is

determined by the customer logging on to a web portal and entering the special
code
displayed on the cash register receipt.
[10] Also provided is a brand-name promotional system, the system
comprising a means (e.g. a scanner) for recording customer purchases at a
retail outlet;
means for categorizing product classes based on the customer purchases; game
piece
generator for printing indicia onto a customer receipt; wherein the indicia is
an
obfuscated brand name found in the product classes; and means for determining
if a
customer correctly guesses the brand name from the indicia. The system also
provides
a method to retrieve the customer's winning remotely, for example via a web
portal.
CA 3028906 2019-01-04

-3-
BRIEF DESCRIPTION OF DRAWING
[11] The invention together with the above and other objects and advantages
will be best understood from the following detailed description of the
preferred
embodiment of the invention shown in the accompanying drawings, wherein:
[12] Fig. 1 depicts a flow chart showing a summary of one embodiment of the
system, showing player, controller, advertiser, and retailer functions;
[13] Fig. 2A depicts an embodiment of static paper receipt from a retailer per

one embodiment of the invention;
[14] Fig. 2B depicts a sample of a digital receipt from a retailer per
one
embodiment of the invention;
[15] Fig. 3 depicts a sample screen pursuant to one embodiment of the
invention;
[16] Fig. 4 depicts a flow chart of operations of one aspect of one embodiment

of the invention;
[17] Fig. 5 depicts a flow chart of operations of one aspect of one embodiment

of the invention;
[18] Fig. 6 depicts a flow chart of operations of one aspect of one embodiment

of the invention;
[19] Fig. 7 depicts example vouchers used in conjunction with one embodiment
of the invention;
[20] Fig. 8 depicts a flow chart of operations of one aspect of one embodiment

of the invention;
[21] Fig. 9 depicts a sample interface for one embodiment of the invention;
[22] Fig. 10 depicts a flow chart of operations of one aspect of one
embodiment of the invention;
[23] Fig. 11 depicts stages of gameplay of one embodiment of the invention;
[24] Fig. 12 depicts a flow chart of operations of one aspect of one
embodiment of the invention;
[25] Fig. 13 depicts a flow chart of operations of one aspect of one
embodiment of the invention;
CA 3028906 2019-01-04

-4-
[26] Fig. 14 depicts an example interface, per one embodiment of the
invention;
[27] Fig. 15 depicts further example interfaces, per one embodiment of the
invention;
[28] Fig. 16 depicts an example interface, per one embodiment of the
invention;
[29] Fig. 17 depicts an example interface, per one embodiment of the
invention;
[30] Fig. 18 depicts an example interface, per one embodiment of the
invention;
[31] Fig. 19 depicts an example interface, per one embodiment of the
invention;
[32] Fig. 20 depicts an example interface, per one embodiment of the
invention;
[33] Fig. 21 depicts a flow chart of operations of one aspect of one
embodiment of the invention;
[34] Fig. 22 depicts a flow chart of operations of one aspect of one
embodiment of the invention; and
[35] Fig. 23 depicts a flow chart of operations of one aspect of one
embodiment of the invention;
DETAILED DESCRIPTION OF THE INVENTION
[36] The foregoing summary, as well as the following detailed description of
certain embodiments of the present invention, will be better understood when
read in
conjunction with the appended drawings.
[37] To the extent that the figures illustrate diagrams of the functional
blocks of
various embodiments, the functional blocks are not necessarily indicative of
the division
between hardware circuitry. Thus, for example, one or more of the functional
blocks
(e.g. processors or memories) may be implemented in a single piece of hardware
(e.g.
a general purpose signal processor or a block of random access memory, hard
disk or
the like). Similarly, the programs may be stand-alone programs, may be
incorporated
CA 3028906 2019-01-04

-5-
as subroutines in an operating system, may be functions in an installed
software
package, and the like. It should be understood that the various embodiments
are not
limited to the arrangements and instrumentality shown in the drawings.
[38] As used herein, an element or step recited in the singular and preceded
with the word "a" or "an" should be understood as not excluding plural said
elements or
steps, unless such exclusion is explicitly stated. Furthermore, references to
"one
embodiment" of the present invention are not intended to be interpreted as
excluding
the existence of additional embodiments that also incorporate the recited
features.
Moreover, unless explicitly stated to the contrary, embodiments "comprising"
or "having"
an element or a plurality of elements having a particular property may include
additional
such elements not having that property.
[39] The invented method controls promotion of various products. The method
provides a means for revenue building for retailers from their existing vendor
bases. A
cornerstone of the method is to induce cash receipt holders (i.e., purchasers
of goods)
to utilize the cash receipt as a game piece. An exemplary inducement is to
associate
the cash receipt with a popular board game. In an embodiment of the method,
the cash
receipt displays the board game name in its familiar logo type.
[40] Retail outlets are suitable venues for practicing the method. Exemplary
retailer types include home improvement stores, supermarkets, grocery stores,
pharmacies, general stores, electronic stores, computer stores, variety goods
stores,
department stores, and club membership stores. In 2012, these retailers
executed
more than 45 billion cash transactions at over 47,000 locations, each with an
average of
nine point-of-sale (POS) cash registers or terminals.
[41] FIG. 1 is a schematic depiction of the invented method, the method
designated as numeral 10. A first step in the method is to produce a cash
register
receipt with printed indicia 12. In one embodiment, the indicia will be
specific for the
purchaser's type of goods bought. In another embodiment, the indicia will have
no
bearing on any of the current goods purchased and will not be based on the
class of
goods just purchased. However, in another embodiment indicia is specific to
type of
store where the receipt was printed and in other embodiments, the "class" of
goods will
be reflected in the indicia. For example, in use of this embodiment in a
supermarket
CA 3028906 2019-01-04

-6-
setting, there are three classes: (a) food/beverage (b) health & beauty (c)
household.
The home improvement store uses three exemplary classes as well (a) tools (b)
hardware (c) appliances. Typically with a promotional coupon program, no one
provides incentive at the point of sale with immediate savings, the coupon
provider
incentivizes the customer to make a return store visit that day, or another
day, or online,
to purchase the items promoted.
[42] Aside from the standard printed data on the receipt, such as items
bought,
price, tax, return policies, etc., the receipt will include two unique
additions which
transforms it into a game piece. First, the receipt will have an obfuscated
version of a
brand name the purchaser has seen before. In an embodiment of the invention,
the
brand name is selected based on the database established for that particular
purchaser.
In another embodiment of the invention, both the retailer and the advertiser
is
responsible for populating the database.
[43] Second, the receipt will also have a number string, word string, or an
alpha-numeric string 14. Ostensibly, this second indicia will allow purchasers
access to
a website to check their winnings when they have attempted guessing the brand
name
from the obfuscated version of the brand name on their cash receipt. However,
the
second indicia will, just as importantly, originate from a plurality of unique
identifier
strings associated with a brand name guessing game, for example the
Brandoodles
board game. The board games come in both virtual and hardcopy form. Virtual
ones
allow the board game to be structured toward the individual purchaser's buying

preferences, and the database of that purchaser's repeated purchases and
visitations to
the website.
[44] Generally, the game is developed in different media forms. For example,
as an embodiment in a board games such as Brandoodles0, which is owned by
BELCOM CORP. of Chicago, IL, and comprises a brand name guessing game.
[45] Another embodiment comprises a television game show. In this
embodiment, the audience utilizes a smart phone or intelligent device to
participate
onsite or remotely from the show venue.
[46] Yet another embodiment is an online version of a well-known board game,
such as BrandoodlesO. A multi-faceted web portal hosts the player access
portal.
CA 3028906 2019-01-04

-7-
Retrieval of winnings occurs by means of coupons or codes based on historical
data
maintained by advertisers and retailers. That data is retrieved and applied to
the on-line
interaction via a standard data link. The database of advertised products is
further
determined and modified as part of the progression of the game.
[47] FIGS. 2A and B are schematic diagrams of exemplary cash register
receipt/game pieces 12. A top portion 16 contains typical purchase details and
return
policy details. A bottom portion 18 of the cash register receipt 12 contains
the
aforementioned two unique additions which transforms the receipt into the game
piece.
The first game piece contains the obfuscated brand name 13. In the example
depicted
in FIG. 2A, the brand name is MAKITA CORDLESS DRILL, and therefore an
appropriate genre for the type of store (e.g. a food store) which generates
the particular
cash register receipt or another type of transaction receipt or other form of
proof of
purchase. FIG. 2B contains the obfuscated brand name 13 MAKITA CORDLESS
DRILL which would be appropriate for any type of shopper, in any type of store

establishment that generates such a cash register receipt or other form of
proof of
purchase such as a digital order confirmation. The functions responsible for
the
receipt/game pieces 12 are depicted as the system 39, described in detail
below.
[48] The second edition is the aforementioned number string, word string or
alpha-numeric string 14. The specific alpha-numeric string depicted (6H378X)
is for
illustrative purposes only and not intended to limit the invention to this
symbol
sequence. In one embodiment, the system employs commercially available
software to
generate millions of randomly generated strings. The association of the alpha-
numeric
string and Brandoodlese is based on (a) the assignment of select alphanumeric
codes
that is assigned a specific value by an administrator account, such as
administrator@brandoodles.com in one embodiment and (b) the pre-sale of a
bucket of
codes being sold by the administrator@brandoodles.com to the advertiser and/or
the
retailer for the purpose of participation._The codes can be generated using a
string
generation software, such as an online string generator found in several
locations such
as at the sweepjudge.com string generator, the source code of which is
attached hereto
as Appendix B.
CA 3028906 2019-01-04

-8-
[49] In operation, a game administrator (e.g., a licensee of the invented
process) charges advertisers (e.g. brand managers) a fee to advertise their
brand name
on a cash register as a receipt or digital proof of purchase. The retail
outlet is charged a
few hundreds of a U.S. cent as a "click charge" to access this revenue
generator. The
retailers agree to use the face of their proof of purchase system as a portal
to the
process. The retailers and brand managers make product selections, and
determine
the number of stores involved and the duration of involvement.
[50] The game administrator manages the pre-sells (e.g., the aforementioned
click charges) and generates the random numbers 14 appearing on the cash
register
receipts. A method for transferring the random numbers is for the
administrator to load
them into the retailer- or brand manager's headquarter-database.
[51] The game administrator then converts the pre-sold number 14 to game
play. Winning numbers are preselected. In an embodiment of the invention, a
brand
manager pre-selects groups of the winning numbers according to an algorithm
that
generates the numbers according to the odds of winning. In this case, everyone

becomes a winner. For example, if 1000 products are preselected to be
displayed, the
odds shall be designated according to a discounting process, given the
distribution
sample as follows:
30 50 70 90 110 130 150 170 200
wins wins wins wins wins wins wins wins wins
90% 80% 70% 60% 50% 40% 30% 20% 10%
[52] Therefore, if a Retailer sold a product for $20, 30 wins at a 90%
discount
would be $18 off the price at which the buyer would only pay $2. The Buyer
would
receive a retrieval code with a value of $18 at redemption. Likewise, 200 wins
at a 10%
discount, the Buyer would receive a discount of $2 off the price at which the
buyer
would pay $18 at redemption.
[53] Hence, if the Seller is an Automotive Dealer selling a big ticket
item such
as a Chevrolet Cruze with a list price of $17,130, the administrator has the
option to
change the algorithm according to the expected giveaway value, as follows:
CA 3028906 2019-01-04

-9-
[54]
3 5 7 15 30 40 200 300 400
wins wins wins wins wins wins wins wins wins
90% 80% 70% 60% 50% 40% 30% 20% 10%
[55] In this case 3 wins at a 90% discount would save $15,417 and 400 wins at
a 10% discount would save $1,730 which would be redeemed with a code at the
time of
purchase.
[56] When reconciled by the winner shopper, the winner is linked to the
administrator's website which in turn notifies the retailer and/or brand
manager of the
existence of the winner. Auditing procedures are established to confirm winner
versus
loser rates. In one embodiment, the exclusive game administrator is
administrator@brandoodles.com. In another embodiment of the invention, both
the
administrator's website and the retailer's website (and perhaps the brand
manager's
website) are notified of the existence of a winner.
[57] The invented method and system for promoting brand names is based on
incentive. Retail outlet customers are induced to play the game embodied on
their cash
receipt/game piece when they see a well-known logo of a brand name guessing
game.
[58] Retailers are induced to participate in the invented method and system
inasmuch as some of the advertising proceeds are funneled back to the retail
outlets.
Example
[59] Users of the invention can access commercially available copies of the
Brandoodles0 game system, or similar system at several game stores or outlets
via a
web search or physical search of "big box" retail locations. For example, the
latest
electronic form of an embodiment of the invention can be found online. The
source
code of the splash screen (FIG. 3) of this web based embodiment is included
below as
Appendix A. The screen features a plurality of play toggles 31-36 the toggles
designed
to actuate the game. A panel 35 of letters is provided to allow the user to
try and guess
the letters associated with the brand name depicted.
[60] The Player's board is an interactive platform that will generate hash
algorithm applications of alpha characters based on a random generator with a
fixed or
CA 3028906 2019-01-04

-10-
variable value. The fixed value may be 26 ¨ representing the number of letters
in the
English alphabet. The fixed value may be 30 ¨ representing the number of
letters in the
Spanish alphabet. The fixed value may be variable with different languages
with
additional subsets of characters. Hence, If the brand in question being used
is
designated as having four words, a brand example may be: TROPICANA PREMIUM
ORANGE JUICE. This brand possesses 4 words with 30 characters, the game piece
generator may produce a possible (26)4 power or a possible randomization of
456,976
combinations of words revealed on each surface that the game is being played,
such as
the Actual Final Result shown:
T R 0 P I C A N A
P R E M I U M
0 R ANG E
J U I C E
[61] The Random Generator would show each result differently as shown on
each surface such as:
T 0 I C N A
R M U M
0 R N E
I C E
[62] And again in every instance as shown here:
T 0 P A A
P E I U M
0 A G E
J U C
CA 3028906 2019-01-04

-11-
[63] The uniqueness of this generation is that no two game sets will appear
alike on any surface of the smart phone, computer or other intelligent device,
hence, the
randomization will also apply to the output on every cash register receipt as
different.
Overview of Operation
[64] Turning to Fig. 4, depicted therein is an overview of the details of the
operation of one embodiment 10 of the system.
[65] The game begins at stage 40. In one embodiment the game enters stage
40 when a buyer completes a transaction at a point of sale terminal and is
issued a
printed receipt with a game piece showing letters and a code to enter. Example
of such
receipts are shown herein. In another embodiment, the game enters the start 40
phase
when an end user visits a website which includes an electronic display of the
game 10.
[66] In the embodiment shown in Fig. 4, in order for the game to proceed from
the start state 40 to the begin gameplay state 44, an administrator must elect
the
category and the number of words to be used in the game 10. In the embodiment
shown in Fig. 4, the administrator choices are performed independently of the
user
playing the game, and this step will occur before a game begins at state 44.
The
administrator of the game performing the administrative duties of state 42 can
make
changes to the game concurrently with a number of players, as the information
about a
particular promotion is stored within the system independently of any players'
actions.
[67] Once at least one category and words are chosen in the administrative
step 42, the gameplay can begin at the gameplay state 44.
[68] For embodiments where a player was not provided with a preprinted
receipt, the system 10 performs a random game piece generator at randomizing
state
46. The algorithm at the randomizing state 46 generates unique individual
random
choices from amongst letters of the alphabet that will appear on the four
individual rows
of data. Again, in an embodiment where the player has received a pre-printed
game
piece on a receipt, at state 46 does not generate a new game piece. The
randomization
state 46 references a database of brands 48 to generate the random puzzle
board.
CA 3028906 2019-01-04

-12-
[69] Once the puzzle board is either generated, or an existing one is used
from
a receipt, a timer 50 starts. The system 10 then proceeds to allow the user to
select
letters at state 52. As shown in the remaining figures, the user is provided
with a letter
board and is asked to fill in missing letters from the game piece. The letter
choosing
state 52 is limited by the timer 50.
[70] During the letter choosing state 52, the system 10 also selects a number
of letters for the specific game board in play at help state 54. In the help
state 54 the
system selects unique random choices from among the letters of the alphabet
appearing on a single individual row to choose up to seven hints of letters
that have not
yet appeared in the row of data. The help state 54 provides both the random
hints 56
randomly selected at the help state 54 and the actual instructions for the
player at the
instructions state 58.
[71] During the letter choosing state 52 the player will fill in the
letters of the
game piece either by choosing letters directly or by using the assistance of
the help
state 54. If all the letters are revealed by the end user or the end user
wishes to solve
the puzzle early, the system 10 moves to the solve state 60. In the solve
state 60 the
timer 50 is stopped and the end user is asked to fill any all the remaining
letters. The
proposed solution is then submitted to the system 10.
[72] The system 10 then decides whether the proposed solution is considered
a win 66 or a loss 74. In one embodiment the system 10 determines that a
system is a
win 66 if all the letters match exactly the puzzle. In another embodiment, the

embodiment 66 will accept phonetic equivalents of the puzzle solution and
therefore will
consider a proposed solution 60 a win 66 even if some of the letters are not
exactly
correct. For example, in some instances a particular puzzle may comprise a
product
name which has alternative spellings, such as one in French and English or
English and
Spanish.
[73] If a proposed solution is determined to be a winning solution at state
66,
the puzzle is revealed at the revelation step 64. The system then proceeds to
the prize
calculation step 62. The details of the calculation step 62, and other
algorithms
described below, are presented in the algorithm in Appendix C. At the prize
calculation
step 62, the system 10 calculates the player's odds based on the value of the
prize and
CA 3028906 2019-01-04

-13-
number of players and awards a quantity in each percentile value. Once the
prize
calculation step 62 assigns a prize to the winning game, the game proceeds to
calculate
the particular player's odds 68. Finally, the game 10 proceeds to the prize
award state
70.
[74] As shown in Fig. 4 while the player is solving the puzzle 60 the timer 50

continues to run. If the game enters the timer ended state 72, the player is
given one
more chance of solving the puzzle at state 60.
[75] If upon submitting a solution at state 60 the system 10 determines that
the
proposed solution is incorrect, the system moves to the incorrect state 74.
The player is
offered an opportunity to play the game again at state 76. If the player
agrees to play
the game again at state 79, the system 10 returns to the begin state 40. If
the player
chooses to not play again at state 78, the game ends 80.
[76] In one embodiment the choice to play again at the play again state 76 is
offered to the player only if the player has not repeated plays an excessive
number of
times in a given time period. In another embodiment, the play again state 76
will only
provide the option to repeat gameplay if the system administrator at the
administration
step 42 has entered additional puzzles for the end user.
[77] In one embodiment, the end user who started game play using a printed
receipt will only be able to repeat games using the products reflected on the
player's
receipt. In this case, the interaction between the database of brands 48 and
the
selection algorithm 46 also interacts with the receipt information gathered in
the begin
state 40.
[78] As can be appreciated from Fig. 4, the system 10 provides for a method of

generating and completion of puzzles, including puzzles that relate to a
database of
brand names 48.
Transaction Receipt Numbers
[79] Turning to the flowchart of Fig. 5 depicted therein is a schematic for
the
process of selecting random numbers which act as transaction receipt numbers.
In one
embodiment, the transaction receipts are cash register receipts. In another
CA 3028906 2019-01-04

-14-
embodiment, the transaction receipts take the form of electronic or other form
of
purchase confirmation.
[80] As explained herein, the system 10 includes a game piece attached to a
receipt, such as the sample receipt shown in Fig. 2. The receipt includes a
redemption
code 14. The steps of assigning the code and related tasks, per one embodiment
90,
are shown in Fig. 5.
[81] The process 90 begins at a start state 92. The start state 92 comprises a

website administration portal 94 in one embodiment. As part of the website
administrator portal 94 the system administrator can select a product category
and
product names 96. The selection of product information 96 results in updates
to the
database of retailers 98 and the database of brands 100. Once the databases
98, 100
are updated, the system administrator can select the brand which will be shown
the to
end user as part of the promotion as part of step 102. The administrator can
also chose
the number of products 104 that will be subject to the promotion.
[82] Once the brands 102 and the products 104 are chosen, the system 90
assigns the random alphanumeric codes at step 106. The randomization step 106
processes and assigns random alphanumeric codes that are transmitted to the
cash
register receipt.
[83] Once the randomization step 106 is completed the system 90 proceeds to
identify a retailer 108 which will use a particular set of puzzles for
products. In one
embodiment, as part of selecting the retailer 108, the system will also
include metadata
regarding the promotion, including the start time and end time as well as the
start date
and end date for each potential promotion.
[84] Once the target retailers are identified 108, the promotions and all
related
metadata are sent to the retailer's database in step 110.
[85] Concurrently with adding brand and product choices, the administrators 94

can observe when random codes are redeemed online using interface 116. Random
codes are assigned 112 from the retailer's database 110 by the retailer's IT
system.
The assignments 112 connect a particular redemption code to the receipt and it
is
acquired by the customer 114. The administrators 94 can see how the codes are
redeemed 116 as part of the game starting process 40 shown in Fig. 4.
CA 3028906 2019-01-04

-15-
[86] While the various data stores such as the databases 110, 98, 100 are
depicted as separate objects in the flow chart in Fig. 5, in one embodiment
the data
stores are located on a single computer which comprises the embodiment of the
system
90. Further while the data stores are shown as distinct databases in the Fig.
5, in
various embodiments the databases are data entries in a single data store,
either an
organized database or other form of data storage, both organized and not. In
one
embodiment the data stores are implemented using a distributed data store such
as a
blockchain record store.
Game Play Opening Step
[87] Turning to Fig. 6 depicted therein is a flow chart of the game play
opening
steps. The game play begins with the game software 140 being invoked on one or

more devices 142.
[88] To begin playing, the end user must register or log in to the game using
the login step 144. To register, the end user must provide identifying
information such
as first and last name as well the email address, a phone number, date of
birth, and
gender, in the depicted embodiment. Once the end user provides the identifying

information, the end user can create a username for the system at step 146.
After
creating the username, the end user can choose preferences 148 and either
redeem a
cash register or point of sale wining code 148 or redeem an automatic winning
voucher
150.
[89] If after establishing a username the end user successfully logs into the
system in order to play 154, the end user can redeem one or more the vouchers
150,
152 or begin playing the game 156. The end user can select one or more game
play
styles 158, each of which is described herein. As discussed in this
application, the end
user may play multiple games and can, in some instances, repeatedly play the
promotional games. However, if the player chooses not to play the game, the
system
140 will end the game and log the end user out at stage 159.
[90] Turning to Fig. 7, depicted therein are several winning vouchers as
described in steps 150, 152. The example voucher 160 includes a redemption
code
162 and a UPC code 164. The UPC code can be used in a point of sale terminal.
For
CA 3028906 2019-01-04

-16-
awards that do not involve a point of sale terminal, other redemption
instructions 166
will be used, as is the case with the instructions for a promotion of a
vehicle's price
shown in Fig. 7.
[91] Fig. 8 in
turn depicts the details for the registration and login process 170
which is invoked from the application 140. The login process 170 allows the
end user to
log in using a unique identification number 172. In order to finalize the
account the end
user must also provide a first name 174 and a last name 176 and an email
address 178.
The email address is confirmed. The end user also provides a cell phone number
180.
[92] When the end user logs into the system and confirms their email address
the end user may reset their password or proceed to log in to the system and
request
login information.
[93] As part of the account set process and log in process the end user must
also review the terms and the disclaimer 182 and agree 184 to the process of
the using
the application 140.
[94] As the game 140 requires the date of birth for its players, the log in
process requests that the players confirm the date of birth and provide the
date of birth
186 when necessary. Further, as the promotions are often gender specific, the
gender
information is also collected from the end user.
[95] In one embodiment, the step of requesting the date of birth 186 comprises

asking the end user to select a date range representing end user ages, instead
of
requesting the specific date of birth. In another embodiment, the step of
requesting the
date of birth 186 comprises requesting the specific birthday but not year. In
this case
the system is able to provide the end user promotions relating to the end
users'
birthday, but without requiring the exact birth year for every end user. In
one
embodiment, the end user is provided with a range of incentives to provide the
birth
year and birthday information, such as a promise of additional promotions if
birthday
and year information is given.
[96] The conclusion of the process is the creation of a system identifier 188
which allows the end user to interact with the system.
[97] Fig. 9 in turn depicts several interfaces for the game 140 to login and
register in the system. The login in steps 170 are depicted in the interface
190. The
CA 3028906 2019-01-04

-17-
interface accepts from the user the name 192, email address 194, and phone
number
196 using a similar look and feel as the game pieces shown to the end user
during
actual game play.
[98] Once the fields of the interface 190 are completed, the system proceeds
to the disclaimer of rights 182 and other steps as shown in Figs. 8 and 9. In
conjunction
with the age usage restrictions, the system also display specific notices
about cell
phone restrictions and regulatory notices such as limits of promotional games
in
Canada. The end user is provided an opportunity to agree to the various terms
and
restrictions 184. If the end user agrees to continue, the system will
establish an identity
for the user 198. The end user will then be provided with an interface to
confirm the
birthdate 200. Finally, the end user will see their assigned system identifier
202. In the
embodiment shown in Fig. 9, the identifier comprises the initials, an encoded
birthdate,
a flag for the gender, and an incremental counter, as well as a country
identifier.
[99] In another embodiment the identifier 202 includes a random number. In
yet another embodiment the identifier is simply a random number not already
assigned
an existing user.
[100] Fig. 10 depicts another login or registration process. In this process
the
application 140 login 170 accepts as input an identification number which is
verified 210
by the application 140. The identification number which is verified originates
from a
third party, such as a point of sale purchase, a loyalty rewards program, or
others. The
verified 210 identifier represents a category of rewards 212 such as a
discount code or
an instant prize. The expiration date of the identification number is
confirmed. The end
user may apply the identified reward as a gift 214 to a third party or to
redeem it 216 for
that particular user.
[101] Regardless of whether it is to the end user's account or to a third
party
account as a gift, the reward points are applied to a balance 218. The balance
218 is
redeemed online 220 or in-store 222. In either case, the final transaction
ends in
checkout of the purchase including the awarded claim.
[102] If the beneficiary of the verified identifier 210 is not currently a
member of
the system 140 the registration information may be received 224 by the system
140 and
CA 3028906 2019-01-04

-18-
the system identifier 226 may be created as described above before any
redemption
occurs.
[103] Turning to Fig. 11, depicted therein are several example interfaces of
the
system 140. The interfaces shown depict the game play steps A-F up to and
including
providing the end user the option to redeem the code online 220 or in-store
222.
Dashboards
[104] Fig. 12 depicts the operational details of an interface or dashboards
230.
One dashboard 232 contains information about the controller of the game
including
making pre-selections for promotions. The controller dashboard 232 interacts
with the
data network 249 to communicate with one or more data stores containing
information
about the game. The dashboard 232 includes information about each product
category
234, the number of products 234 and a brand alphabet 236. The system also
generates
the random brand alphabet 238, the random percentage values 240. The points of
sale
242 are established. The demographic data 244 is liked to particular
promotions and
rewards program 246 data is also linked to promotions. Finally, participants
are
consigned reward points 248.
[105] The dashboard 230 also includes a means for the end user to login or
register 250 using a tablet, laptop or handheld computing device 252. The end
user can
begin a game 254. The game can involve a cash register or point of sale
receipt puzzle
260 or where the end user begins the puzzle from an online game source 256.
The end
user must fill in the missing letters during the available time period set by
a timer 258.
The winning brand is awarded 262 with cross merchandizing premium added 264,
if
earned. The cross merchandising premium is unlocked by accessing a special
character 268 in the puzzle board. The system involves award points 266 and an
add
on premium brand award 270, in one embodiment.
[106] A second set flowcharts for user dashboards are depicted in Fig. 13. The

dashboards again require a login 280. The entities that can log in to the
system using
this dashboard 280 include registered retailers 282 and registered advertisers
284.
Once the retailers or advertisers are logged in the control of the system is
transferred to
a system controller 286. The system controller administers a number of data
stores
CA 3028906 2019-01-04

-19-
296, 292, and 290. Some of the data stores, such as the data store 296 further
includes
subordinate data stores 294. This subordinate data store 294 will include
reporting
means, in one embodiment. In another embodiment, the subordinate data store
294
includes information about a single customer, including sensitive information
such as
personally identifiable information. As such the subordinate data store 294 is

maintained as a separate entity from the primary data store 296.
[107] As shown in Fig. 13, the advertiser and retailer data synchronizer 288
operates on the retailer and advertiser data stores 290, 292. The retailer
data store 290
includes retailer assigned codes 300. The advertiser data store 292 includes
advertiser
assigned codes 302. The codes 300, 302 are used to cross link transactions
including
voucher code distribution 304, CPSS cross merchandising 306 and CPSS alphabet
symbol linking 308, which are described below
[108] The main data store 296 is controlled by the system controller 286 and
it
includes tools to generate voucher codes 310, set access preferences 312.
Further the
main data store 296 includes the ability to access shopper profiles 314,
shopper
voucher codes 316 and for setting of customer access to CPSS link 318. The
CPSS
system is shown in detail in further figures and described below.
Example Interfaces
[109] Turning to Fig. 14, depicted therein is a sample interface 320 for a
user of
the system. The interface includes an action area 322 where the end user can
select
actions such as reviewing the points system, shopping for items, and other
actions. The
interface 320 also includes the end user's identifier 324 the process for
which was
discussed above. The interface 320 also allows the end user to log in to other
areas of
the system 326, such as if the end user also wanted to manage their own
promotions.
The interface 320 also allows the end user to redeem a winning code 328.
[110] Fig. 15 depicts two sample user interfaces. A first account setup
interface
346 allows the end user to select an action 330 such as to log in or register.
Presuming
that the user has not previously registered with the system, the interface 346
allows the
user to provide a name 332, email address 334, phone number 336, agree to
terms and
CA 3028906 2019-01-04

-20-
conditions 338 and provide a date of birth 340. Once the information is filled
in a user id
is generated 342 and the end user can proceed in the system.
[111] A second interface is shown in Fig. 15, the second interface being for
purchasing a discounted item 348. As part of the purchase, the end user may
select the
gift option 344, instead of buying the item for themselves.
[112] A view of an interface 350 of the Category Participating Sale System
(CPSS) is shown in Fig. 16. The system allows registered advertisers 352 to
view
information such as the number of active advertisers and the number of active
campaigns. In turn, registered advertisers 351 can review campaign performance
by
accessing their portal. For a particular campaign, the advertiser can assign
voucher
codes 354, can review the shopper database 356, and the number of vouchers
that
have been redeemed year to date 358. The user of the CPSS can also view the
alphabet data links 360 and the relevant sections of the advertisers and
retailers
database 362. Other features include the cross merchandise units link 364, the

customer preferences link 366, the ID system 368 and the options for setting
of random
values 370. Finally, the user can access the reward program 372.
[113] The details of a sample interface of the CPSS cross merchandising
interface is shown in Fig. 17. The interface includes areas to select brands
for each
letter 380 and a listing of the number of active promotions 382 for each
brand. The end
user may select a number of actions 384 including selecting an alphabet block,

assigning cash values, and others. Puzzles with the selected brands for cross
merchandising appear in the preview 388 of a puzzle board 386. For example, in
the
embodiment shown in Fig. 17, the missing A of the 'AUTO' puzzle will be filled
in with
the A in the logo for Ace Hardware and so selecting that letter will result in
cross
merchandising. The end user of the interface can view and change the alphabet
data
links 381 and review information about cross merchandising 383.
[114] Example output of the cross merchandising is shown in Fig. 18. The
game begins with a blank board 390. A number of randomly selected letters are
filled in
at step 392. The end user select letters during game play 394. Selecting the A
during
stage 396 results in receiving a cross merchandising offer 400 from the
retailer 402
CA 3028906 2019-01-04

-21-
associated with the specially designated letter. The end user also receives
the main
offer 398 such as the ability to redeem a discount either in store 404 or
online 406.
[115] A second alternative gameplay interface is shown in Fig. 19. In this
embodiment, game again begins with a blank board 390. A number of randomly
selected letters are filled in at step 392. The end user select letters during
game play
394. Selecting the A during stage 396 results in receiving a mystery offer 408
from an
unknown retailer 410. As before, the end user also receives the main offer 398
such as
the ability to redeem a discount either in store 404 or online 406.
[116] Another interface is shown in Fig. 20. This interface shows another view

of the CPSS module showing the number of assigned voucher codes 412, the
database
of advertisers 414 and the number of special alphabet links 416 and the total
cost of the
vouchers 418.
[117] Fig. 21 depicts a flow chart showing managerial functions within the
system. The system involves a retailer or advertiser logging in 420. Once the
login
information is verified, access to the data store 422 is granted. The data
store and the
system are in communication with point of sale locations 440 using a data
network 424.
The system communicates with the data store 422 to ensure that voucher codes
426
are distributed. The advertiser or retailer logged into the system can manage
product
categories 428 and which products to advertise 430 using the promotions. The
products are assigned product codes 432. The redemption codes and the product
codes are linked to product venues 436 and point of sale locations 440.
Finally, the
advertiser or retailer can add cross merchandising links 438 and also include
advanced
retailer crosstalk 442.
System Schematic
[118] The interactions between the system components and the various
functions of one embodiment of the system are shown in schematic format in
Fig. 22.
As shown in Fig. 22, the system controller 450 manages the functions of the
CPSS and
other functions.
CA 3028906 2019-01-04

-22-
[119] The first function of the controller 450 is the cross selling premium
products in alphabet links database, using the cross merchandising within the
gameplay
board 452.
[120] In one embodiment, the system verifies the inventory database 454 before

making such cross-merchandising available. The cross merchandising products
are
advertised by registered advertisers by use of cross linked voucher codes 456.
The
voucher codes and other data is stored in a data store 458, in one embodiment.
The
registered advertisers also specify which products in the inventory 454 are to
be award
goods at the point of sale terminals 460.
[121] Once the settings are finalized 460, the puzzle boards are generated and

added to receipts or otherwise displayed at point of sale locations 462. Two
alpha
numeric code banks are created at point of sale locations 464, 466. At the
point of sale
a receipt is generated 468. For the first code bank 464, the display of a
discount
amount and the item is set 468. The player will solve the puzzle on a paper
cash
register receipt from the point of sale 466. The end user may also bypass the
paper
receipt and play the game on a smart device 470. The second data store 466
will
display the amount and item puzzle 472. Regardless of how the player reaches
the
app, the player will need to login or register with the app to gain entry into
the system
474. The player can choose preferences to control category and link rewards
476 once
they are logged into the system. The reward points are managed by the CPSS
controller 478. The player will also set up a unique identifier and login to
register to play
the game 480. The player may also redeem codes and link to preferences as well
as
the CPSS 482. The player may also send reward codes as gifts 484 and check out

purchases that used a won discount or other redemption code 486.
Sample Consumer Interaction
[122] Fig. 23 depicts a sample consumer interaction with the system. In the
depicted embodiment, the point of sale terminal location 462 is in
communication with a
data network 424. The data network 424 provides a connection to a system that
comprises an implementation of the system as described above. The customer
interaction starts at beginning state 40. The consumer completes a point of
sale
CA 3028906 2019-01-04

-23-
transaction, receiving a paper or digital receipt game piece 468. The consumer
then
plays the game on a paper receipt 468 as shown in Fig. 2A or on a digital
device 470 as
shown in Fig. 2B.
[123] Regardless of how the game starts, the consumer will log in to the
application 474 and begin game play 44. The player will choose letters 52 and
eventually the puzzle will be revealed 64. The player will solve the puzzle
60. The
player may redeem a code 114, in one embodiment of the system. The prize is
awarded 70 when the puzzle is revealed if the player meets the winning
conditions 66.
If the player loses 74, the player has the option to play again 76 which can
be confirmed
at state 79 or discontinue playing 78, in which case the game ends 80.
[124] It is to be understood that the above description is intended to be
illustrative, and not restrictive. For example, the above-described
embodiments (and/or
aspects thereof) may be used in combination with each other. In addition, many

modifications may be made to adapt a particular situation or material to the
teachings of
the invention without departing from its scope. While the dimensions and types
of
materials described herein are intended to define the parameters of the
invention, they
are by no means limiting, but are instead exemplary embodiments. Many other
embodiments will be apparent to those of skill in the art upon reviewing the
above
description. The scope of the invention should, therefore, be determined with
reference
to the appended claims, along with the full scope of equivalents to which such
claims
are entitled. In the appended claims, the terms "including" and in which" are
used as
the plain-English equivalents of the terms "comprising" and "wherein."
Moreover, in the
following claims, the terms "first," "second," and "third," are used merely as
labels, and
are not intended to impose numerical requirements on their objects.
[125] The present methods can involve any or all of the steps or conditions
discussed above in various combinations, as desired. Accordingly, it will be
readily
apparent to the skilled artisan that in some of the disclosed methods certain
steps can
be deleted or additional steps performed without affecting the viability of
the methods.
[126] As will be understood by one skilled in the art, for any and all
purposes,
particularly in terms of providing a written description, all ranges disclosed
herein also
Date Recue/Date Received 2021-06-30

-24-
encompass any and all possible subranges and combinations of subranges
thereof. Any
listed range can be easily recognized as sufficiently describing and enabling
the same
range being broken down into at least equal halves, thirds, quarters, fifths,
tenths, etc.
As a non-limiting example, each range discussed herein can be readily broken
down
into a lower third, middle third and upper third, etc. As will also be
understood by one
skilled in the art all language such as "up to," "at least," "greater than,"
"less than,"
"more than" and the like include the number recited and refer to ranges which
can be
subsequently broken down into subranges as discussed above. In the same
manner, all
ratios disclosed herein also include all subratios falling within the broader
ratio.
[127] One skilled in the art will also readily recognize that where members
are
grouped together in a common manner, such as in a Markush group, the present
invention encompasses not only the entire group listed as a whole, but each
member of
the group individually and all possible subgroups of the main group.
Accordingly, for all
purposes, the present invention encompasses not only the main group, but also
the
main group absent one or more of the group members. The present invention also

envisages the explicit exclusion of one or more of any of the group members in
the
claimed invention.
Date Recue/Date Received 2021-06-30

-25-
Appendix/V. Source(Dock)forWeb-based Embodiment
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"
<!-- GOOD FOR SE0 -->
<meta name="description" content=">
<meta name="keywords" content=">
<meta name="copyright" content="Copyright C, 2011 YourWebsite.com"
<meta name="author" content="Your Name"
<meta name="designer" content="Your Name"
<meta name="email" content="contact@email.com"
<meta name="robots" content="index, follow"
<meta name="googlebot" content="index, follow"
<meta name="revisit-after" content="1 Day"
<meta name="rating" content="General"
<meta name="distribution" content="Global"
<!-- GOOGLE VERIFY -->
<meta name="google-site-verification" content="XXX-XXX-XXX" I>
<!-- ICON FAVI -->
<link rel="icon" type="image/x-icon" href="images/favicon.png"
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.png"
<!-- FACEBOOK META SHARE -->
<meta property="og:title" content=" I>
<meta property="og:type" content="website" I>
<meta property="og:url" content="http://yourwebsite.com" />
<meta property="og:image"
content="http://yourwebsite.com/images/facebookimage.png" I>
<meta property="og:site_name" content=" />
<meta property="og:description" content=" I>
<!-- TITLE OF WEBSITE -->
<title>Brandoodles on HTML</title>
<!-- WEBSITE SCRIPT & SOURCE -->
<link rel="stylesheet" href="css/reset.css"
<link rel="stylesheet" href="css/style.css"
<link rel="stylesheet" href="css/jquery-ui-1.8.21.custom.css"
<script src="js/jquery.1.7.2.min.js" type="text/javascript"></script>
<script src="js/jquery-ui-1.8.21.custom.min.js"
type="text/javascript"></script>
<script src="js/jquery.global.js" type="text/javascript"></script>
<script src="1s/test.ls?1363119143" type="text/javascript"></script>
<script src="greensock/minified/TweenMax.min.js"
type="text/javascript"></script>
<script type="text/javascript" src="js/jquery.timer.js"></script>
<script type="text/javascript" src="js/timer.js"></script>
<script>
$(function() {
var options = {
letterWidth: 40,
guess: 7,
hint: 1,
data:
{"1_1":1"text":"","solution":"Y","x":1,"y":1),"1_2":1"text":"o","solution":"o
=
"x":2,"y":1),"1_3":{"text":"o","solution":"o","x":3,"y":1},"1_4":{"text":"-
","solution":"-
= "x":4,"y":1},"1
5":1"text":"H","solution":"H","x":5,"y":11,"1_6":{"text":"o
=
"solution":"o","x":6,"y":1},"1_7":{"text":"o","solution":"o","x":7,"y":1},"
CA 3028906 2019-01-04

-26-
2 1":{"text":"","solution":"C","x":1,"y":21 , "2 2"-.
{"text":"h","solution":"h",
_
"x":2,"y":21,"2_3":{"text":"o","solution":"o","x":3,"y":2},"2_4":{"text":"","
solution":"c","x":4,"y":21,"2_5":1"text":"0","solution":"o","x":5,"y":21,"2_6
(= "text":"","solution":"1","x":6,"y":2),"2_7":("text":"a","solution":"a","x"
:7,"y":2),"2_8":("text":"t","solution":"t","x":8,"y":2),"2_9":("text":"e","so
lution":"e","x":9,"y":2),"3_1":1"text":"D","solution":"D","x":1,"y":31,"3_2":
{"text":"r","solution":"r","x":2,"y":31,"3_3":{"text":"","solution":"i","x":3
,"y":31,"3_4":{"text":"","solution":"n","x":4,"y":31,"3_5":{"text":"k","solut
ion":"k","x":5,"y":31} 1;
$('#branArea').Brandle(options);
1);
function replay() {
//$('#branArea').html(");
var options = f
letterWidth: 40,
guess: 7,
hint: 1,
data:
{"1_1":("text":"0","solution":"V","x":1,"y":11,"1_2":{"text":"i","solution":"
i","x":2,"y":1},"1_3":("text":"v","solution":"v","x":3,"y":1),"1_4":("text":"
","solution":"a","x":4,"y":1),"1_5":{"text":"","solution":"r","x":5,"y":11,"1
6":{"text":"i","solution":"i","x":6,"y":1),"1 7":{"text":"n","solution":"n",
= :7,"y":1},"2_1":{"text":"","solution":"C1 ,"x":1,"y":21,":{"text":"","s
olution":"a","x":2,"y":2},"2_3":{"text":"f","solution":"f","x":3,"y":2},"2_4"
:{"text":"f","solution":"f","x":4,"y":21,"2_5":("text":"","solution":"e","x":
5,"y":21,"2_6":("text":"i","solution":"i","x":6,"y":2),"2_7":{"text":"n","sol
ution":"n","x":7,"y":2},"2_8":1"text":"","solution":"e","x":8,"y":2),"3_1":{"
text":"P","solution":"P","x":1,"y":3},"3_2":("text":"i","solution":"i","x":2,
=
:3),"3_3":("text":"","solution":"1","x":3,"y":3),"3_4":{"text":"","solutio
n":"1","x":4,"y":3),"3_5":("text":"s","solution":"s","x":5,"y":311
1;
W#branAreal).Brandle(options);
//clock.resetCountdown();
1
function showError() f
var failure = document.getElementById("failure");
TweenLite.fromTo(failure, 1, (top: 0, left: 210), {top: 80, left:
210, ease: Back.easeInOut, onComplete: closeError});
function showSuccess(num) f
var success = document.getElementById("success");
success.innerHTML = "<p style='font-size: 40px;padding-
top:100px;padding-left:50px;font-family: Arial'>There are "+num+" letter in
the puzzle.. .</p>";
TweenLite.fromTo(success, 1, {top: 0, left: 2101, {top: 80, left:
210, ease: Back.easeInOut, onComplete: closeSuccess1);
1
function closeError() {
var failure = document.getElementById("failure");
TweenLite.to(failure, 1, {top: -999, left: 210, ease:
Back.easeInOut1);
1
function closeSuccess() f
CA 3028906 2019-01-04

-27-
var success = document.getElementById("success");
TweenLite.to(success, 1, {top: -999, left: 210, ease:
Back.easeInOut});
1
function showHint() {
var hint = document.getElementById("hint");
TweenLite.fromTo(hint, 1, {top: 0, left: 210}, {top: 80, left: 210,
ease: Back.easeInOut, onComplete: closePopup});
1
function closePopup() 1
TweenLite.to(..popup', 1, {top: -999, left: 210, ease:
Back.easeInOut});
</script>
</head>
<body>
<!-- CODE WILL BE HERE -->
<div class="owrappern>
<div id="branArean>
<div class="nav"
<div class="logo"
<img src="images/logon.png" />
</div>
<div class="buttons"
<!-- div class="puzzleinfo"
<p><strong>Category:</strong>
Food</p>
<p><strong>Word in
puzzle:</strong> 4</p>
</div -->
<div class="countdown"
<p class="desc">Time</p>
<span class="count"
id="countdown">05:00:00</span>
</div>
<div class="guess"
<p class="text">Guesses</p>
<p class="guess-count">5</p>
</div>
<div class="tag" id="info"
<div style="margin-top: 15px">Go
go<br 7>go</div>
</div>
</div>
</div>
</div>
<div id="failure" class="failure"
style="background: url(images/failed_popup.png) no-
repeat; width: 570px; height: 320px; display: block; position: absolute; top:
-9999px;"></div>
<div id="success" class="success"
style="background: url(images/success_popup.png) no-
repeat; width: 570px; height: 320px; display: block; position: absolute; top:
-9999px;"></div>
<div id="hint" class="hint popup"
CA 3028906 2019-01-04

-28-
style="background: url(images/success_popup.png) no-
repeat; width: 570px; height: 320px; display: block; position: absolute; top:
-9999px;">You
can only use 1 hint per game...</div>
<div class="bshint">D0 NOT REPEAT BUTTONS ALREADY PLAYED</div>
</div>
<div class="footern>
<div class="lpart"
<img src="images/25-logo.png" 7>
</div>
<div class="rpart"
<img src="images/belcom-logo.png" />
</div>
<div class="mpart"
<div class="mininav"
<ul>
<li><a href="">HOME</a></li>
<li><a href=">ABOUT US</a></li>
<li><a href="">RULES</a></li>
<li><a href=">TERMS &
CONDITIONS</a></li>
<li><a href="">REDEMPTION</a></li>
<li><a href=">PRIVACY POLICY</a></li>
<li><a href="">FAQ</a></li>
<li><a href="">CONTACT US</a></li>
</ul>
</div>
<ID>
Copyright &copy; 1991 - 2013. Belcom Corp.
Brandoodles is a
registered Trademark of Belcom Corp. All Rights
Reserved.<br />
Brandoodles.com consists of an independent
rewards promotional
program. Belcom Corp and Brandoodles.com<br I>
are not affiliated
with any of the branded products or retailers
listed or stated in
the contents herein or any other<br /> Belcom
Corp programs.
Trademarks, service marks, logos, and/or domain
names (including,
without limitation,<br /> individual names of
products and
retailers) are the property of their respective
owners, having no
association<br /> with or make any endorsement
of the products or
services provided by Belcom Corp. or
Brandoodles.com.<br /> If you
have any questions regarding contents please
contact us at: <a
href="mailto:info@belcomcorp.com">info@belcomcorp.com</a>.
</p>
</div>
</div>
CA 3028906 2019-01-04

-29-
</body>
</html>
CA 3028906 2019-01-04

-30-
Appendix B: Random String Generator Source
<html xmlns="http://www.w3.org/1999/xhtml"
<head>
<title>Random alphanumeric string generatcr</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="description" content="Generate random alphanumeric strings
of numbers, letters and symbols that can be used to create coupon codes,
passwords and other unique identifiers." I>
<meta name="keywords" content="alphanumeric strings, numbers, letters,
symbols, true random numbers" I>
<link rel="shortcut icon" href="images/favicon.ico?v4" />
<base href="http://www.sweepjudge.com/" />
<link href="styles.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="css/styles.css?v4" />
<script src="includes/prototype.js" type="text/javascript"></script>
<script src="includes/campus.common.js"
type="text/javascript"></script>
<script src="includes/login utils.js" type="text/javascript"></script>
<script src="includes/random.js" type="text/javascript"></script>
</head>
<body>
<!--Start header-->
<div id="header"
<div id="header_content">
<a href="/" id="logo"><img src="img/logo-new.png"
alt="Third party drawing service"/></a>
<!--Start login-lcgout-->
<NOBR><a class="login_logout"
href="login.htm"><span
class="stretch_button"><span><span>login</span></span></span></a></NOBR>
<!--End login-logout-->
<div class="clear"></div>
<table align="left" cellpadding="0"
cellspacing="0" style="margin-left:6px"
<t r>
<td>
<!--Start main-menu-->
<ul id="main_menu"
<li class="first"><span><a
href="index.htm">Home</a></li><li><span><a
href="third party drawings.htm">Third Party Drawings</a></11><li><span><a
href="public records.htm">Public Records</a></li><li><span><a
href="free tools.htm">Free Randomizer Tools</a></li><li class="last"><span><a
href="blog.htm">Blog</a></li>
</ul>
<!--Start end main-menu-->
</td>
</tr>
</table>
<div class="clear"></div>
</div>
</div>
<!--End header-->
CA 3028906 2019-01-04

-31-
<!--Start main area-->
<div id="mainarea"
<!--Start content-->
<div id="content"
<!--Start center-->
<div class="center-top_angel"
<div class="center-bottom_angel"
<div class="center"
<!--Start drawing step4-->
<div
class="drawing_step4_pages">
<h1>String
Generator</h1>
<table width="100%">
<tr>
<tr>
<td colspan="3" style="padding-top:3px;padding-
right:200px;background-image:url(images/random/string-image.jpg);background-
position:top right;background-repeat:no-repeat"
<p>The form below is a random string generator,
which can be utilized to generate a series of coupon codes, unique passwords
and any other random alphanumeric strings. By entering &guot;L&quot; for
Letters, &quot;N&quot; for Numbers and &quot;S&quot; for Symbols, the string
generator can create strings that are more than 10 characters in length. This
is one of the only random string generators that incorporate the optional use
of symbols to truly make it a complete solution for all of your string needs.
<BR><BR>
To begin generating random strings, simply enter how many Numbers, Letter and
Symbols you would like your string to consist of and select how many strings
you would like to generate
</p>
</td>
</tr>
<tr>
<td colspan="3" height="30"
<div class="border_div"></div>
</td>
</tr>
<tr>
<td style-" colspan="3"
<h3>String Generator - Form</h3>
<table width="100%" class="steps-table"
<tr>
<td width="80">Step 1 -</td>
<td>
Pattern: <input
size="10" maxlength="16" type="text" value="LL-NNNN" id="pat" I> (Use: N to
insert random digit, L-to insert random letter)
</td>
</tr>
<tr>
<td>Step 2 -</td>
<td>
Number of records:
<input type="text" name="num" value="10" size="6" maxlength="12" id="num" />
</td>
CA 3028906 2019-01-04

-32-
</tr>
<tr>
<td>Final Step</td>
<td>
<input type="suhmit"
value="Generate" onclick="makeRequest()" I>
<input type="submit"
value="Reset form" onclick="resetForm()" />
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3" height="30"
<div class="border_div"></div>
</td>
</tr>
<tr>
<td style="" valign="top" colspan="2"
<h3>String Generation - Results</h3>
<span id="results-stub"><br>To generate
results, please fill out the form above </span>
<pre id="results"></pre>
</td>
</td>
<td width="500" style="border-left: 1px solid #D909D9;"
valign="top"
<div class="other-random-tools-small-
block"
<h3>Free Randomizer Tools</h3>
<p><a
href="lottery.htm">Lottery Quick Pick</a> is perhaps the Internet's most
popular with over 120 lotteries</p>
<p><a
href="integer generator.htm">Number Generator</a> makes random numbers in
configurable intervals</p>
<p><a
href="password generator.htm">Password Generator</a> makes secure passwords
for your Wi-Fl or that extra Gmail account</p>
<p><a
href="string generator.htm">String Generator </a>makes random alphanumeric
strings and includes the ability incorporate symbols, much like you would
find when generating coupon codes for your Web site.</p>
</div>
</td>
</tr>
</td>
</tr>
</table>
</div>
<!--End drawing step4-->
</div>
</div>
</div>
<!--End center-->
CA 3028906 2019-01-04

-33-
</div>
<!--End content-->
</div>
<!--End main area-->
<!--Start footer-->
<div id="footer"
<div id="footer_content">
<ul id="footer_links"
<li>Third Party Drawings<br/>
<a
href="third party drawings.htm">Overview</a>
</li>
<11>Public Records<bri>
<a
href="public records.htm">Results</a>
</li>
<li>Free Randomizer Tools<br/>
<a href="integer generator.htm">Number
Generator</a><br/>
<a
href="password generator.htm">Password Generator</a><br/>
<a href="string generator.htm">String
Generator</a><br/>
<a href="lottery.htm">Lottery
Generator</a><br/>
</li>
<li>About SweepJudge<br/>
<a href="contactus.htm">Contact
Us</a><br/>
<a href="faq.htm">FAQ's</a><br/>
<a
href="third party drawings tac.htm">Terms &#38; Conditions</a><br/>
<a href="policy.htm">Privacy
Policy</a><bri>
</li>
<li>Partners<bri>
<a target=" blank"
href="http://www.cityopoly.com">Cityopoly</a><br/>
<a target=" blank"
href="http://www.brollytime.com">Rain umbre1las</a><br/>
</li>
</ul>
<a href="/" id="footer_logo"><img
src="img/footer logo.png" alt="Random number service"/></a>
<div class="clear"></div>
<p class="copyright">&#169; 2013 SweepJudge.com All
Rights Reserved</p>
</div>
</div>
<!--End footer-->
<script type="text/javascript"
var AJAXBaseURL = 'http://www.sweepjudge.com';
var AJAXSessionParam =
'&PHPSESSID=uj82aiq4u7181vpipck2Ohg627';
var AJAXSessionID = 'uj82aiq4u7181vp1pck20hg627';
</script>
CA 3028906 2019-01-04

-34-
<div id="campus_popup_overlay"></div>
<div id="campus-custom-popup" style="display:none"
<div id="campus-custom-popup-html" style="float:left;width:92%">
</div>
<div style="float:right;width:25px;">
<a href="javascript:;" id="campus-custom-popup-c1ose-btn"
onclick="closeCustomModalDialog();return
fa1se;"style="background:none;padding:5px; padding-right:10px;"><img
src="http://www.sweepjudge.com/images/close.gif" border="0"></a>
</div>
</div>
<div id="campus-custom-tooltip" style="display:none"
<div id="campus-custom-tooltip-htm1"></div>
</div>
<script src="includes/ut.util.js" type="text/javascript"></script>
<script type="text/javascript"
var _gag = _gag 11 [];
_gag.push(['_setAccount', 'UA-37565783-1']);
_gag.push(P_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ss1' :
'http://www') + '.google-analytics.ccm/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
1)();
</script>
</body>
</html>
<script src="includes/strings.random.js" type="text/javascript"></script>
CA 3028906 2019-01-04

-35-
Stringssandom.js
function resetForm()
$('pat').value = 'NN-LLLL';
$(11en').value = 10;
1
function makeReguest()
var num - $('num').value;
var pat = $('pat').value;
var code =
new
Ajax.Reguest('/ajax/strings.php?pat='+pat+'&num=l+num+'&contactCheck=v+code,
method: 'get',
onSuccess: function (transport)
var response = transport.responseText II "Wrong
parameters";
$('results-stub').hide();
CMPS_SetBlinkingText(Wresults'),response);
1,
onFailure: function()
alert('Error! Something went wrong...')
1
});
1
CA 3028906 2019-01-04

-36-
Appendix C: Algorithms
from django.db import models
from Brandoodles.products.forms import DistributionFormField
class DistributionField(models.Field):
metaclass = models.SubfieldBase
def ___ init (self, *args, **kwargs):
super(DistributionField, self). init (*args, **kwargs)
def get_internal_type(self):
return "CharField"
def to_python(self, value):
if isinstance(value, list):
return value
if not value:
return L
return map(int, value.split(','))
def get_prep_value(self, value):
return ','.join(map(unicode, value))
def formfield(self, **kwargs):
defaults = ('form class': DistributionFormField)
defaults.update(kwargs)
return super(DistributionField, self).formfield(**defaults)
from django.contrib import admin
from django.shortcuts import render_to_response
from django.template import RequestContext
import django.forms as forms
from django.contrib import messages
from django.http import HttpResponseRedirect
import datetime
from Brandoodles.settings import distribution_values, initial_dist
from Brandoodles.products.models import Category, Product, Manufacturer
from Brandoodles.prizes.models import make_puzzle_start
from Brandoodles.products.forms import DistributionFormField
class CategoryAdmin(admin.ModelAdmin):
list_display = ('code', 'name')
admin.site.register(Category, CategoryAdmin)
CA 3028906 2019-01-04

-37-
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'category', 'price')
fields = (('name', 'manufacturer', 'picture'), ('category', 'price',
'is mystery'), 'distribution', 'retailers')
filter_horizontal = ('retailers',)
actions - ['generate puzzles']
class GenerateNewPuzzleForm(forms.Form):
selected action = forms.CharField(widget=forms.MultipleHiddenInput)
number = forms.IntegerField(initial=100)
expiration = forms.DateField(initial=datetime.date.max)
def generate_puzzles(self, request, queryset):
if 'make puzzles' in request.POST:
form = self.GenerateNewPuzzleForm(request.POST)
if form.is_valid():
number = form.cleaned_data['number.]
expiration - form.cleaned_data['expiration']
for product in queryset:
weights = product.distribution
sum_weights = sum(weights)
number_to_generate = [int(number*w/sum_weights)
for w in weights]
for i in range(len(weights)):
for j in range(number_to_generate[i]):
make_puzzle_start(product,
distribution_values[i], expiration)
messages.success(request, "Puzzles created")
return HttpResponseRedirect(request.get_full_path())
else:
form = self.GenerateNewPuzzleForm(initia1={
'selected action':
request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})
return render to response(lnew_puzzles.htm11,
{'form': form,
'path': request.get_full_path()),
RequestContext(request))
generate_puzzles.short_description = 'Add More Puzzles'
admin.site.register(Product, ProductAdmin)
admin.site.register(Manufacturer)
import django.forms as forms
import decimal
from Brandoodles .settings import distribution values
from Brandoodles.settings import initial_dist
class DistributionWidget(forms.MultiWidget):
def init (self, attrs=None):
widgets = (forms.TextInput() for x in distribution_values)
super(DistributionWidget, self). init ___ (widgets, attrs)
def format_output(self, rendered_widgets):
out =
CA 3028906 2019-01-04

-38-
for i in range(len(distribution_values)):
out += unicode(int(distribution_values[i]*100)) + u"%: " +
rendered_widgets[i]
return out
def decompress (self, value):
if isinstance(value, list) and value:
return [int(x) if x else 0 for x in value]
else:
return [b for (_, b) in initial_dist]
class DistributionFormField(forms.MultiValueField):
widget = DistributionWidget
def ___ init __ (self, *args, **kwargs):
all_fields = (forms.IntegerField() for x in distribution_values)
if "max length" in kwargs:
del kwargs["max_length"]
super(DistributionFormField, self). init (all fields, *args,
**kwargs)
def clean(self, value):
return [int(x) if x else 0 for x in value]
def compress (self, data_list):
return data_list
forms.IntegerField(),
forms.IntegerField(),
if "max length" in kwargs:
del kwargs["max_length"]
super(DistributionFormField, self). init (all_fields, *args,
**kwargs)
def compress(self, data_list):
return list (data_list)
from django.db import models
from Brandoodles.retailers.models import Retailer
from Brandoodles.products.fields import DistributionField
class Category(models.Model):
name = models.CharField(max_length=30)
code = models.PositiveIntegerField(primary_key=True)
def unicode (self):
return self.name
class Meta():
verbose name = "Category"
verbose_name_plural = "Categories"
class Manufacturer(models.Model):
name = models.CharField(max_length=30)
CA 3028906 2019-01-04

-39-
logo = models.ImageField(upload_to='logo_images')
def unicode __ (self):
return self.name
class Product(models.Model):
name - models.CharField(max_length=70)
category = models.ForeignKey(Category)
manufacturer = models.ForeignKey(Manufacturer)
price - models.DecimalField(max_digits=12, decimal_places=2)
picture = models.ImageField(upload_to=1product_images')
distribution = DistributionField(max_length-100, blank=True)
is mystery = models.BooleanField()
retailers - models.ManyToManyField(Retailer, blank-True)
def unicode (self):
return self.name
from django.http import HttpResponse
from django.shortcuts import render
import datetime
import decimal
import Brandoodles.puzzle as brandoodles
from Brandoodles.prizes.models import Puzzle
from Brandoodles.products.models import Product
#The view which generates the main page, which primarily consists of the game
)f interface.
def main_page(request):
serial = request.session.get('prize_serial')
game_data = request.session.get("current_puzzle")
#Did they make a request?
if request.method != 'POST':
#Check whether there is an ongoing puzzle
if "current puzzle" in request.session:
#Is the puzzle finished?
if brandoodles.is_complete(game_data['letters_hidden']):
#If so, display the completed puzzle and the prize
return win_screen(request, game_data, serial)
else:
*Otherwise, display the game in progress
return display_game_state(request, game_data, bool(serial))
else:
#No game in progress, so create a new one
return new game (request)
else:
#Did they request a new puzzle?
if "newpuzzle" in request.POST or "current puzzle" not in
request .session:
return new_game(request)
#Did they make a guess?
elif "guess" in request.POST:
#Adjust the state of the game appropriately
guess = request.POST["guess"]
CA 3028906 2019-01-04

-40-
if guess:
new letters = brandoodles.guess(game_data[ 'letters_hidden'],
guess [0]
game_data['letters_hidden'] = new_letters
request.session["current_puzzle"] = game_data
if brandoodles.is_complete(game_dataPletters_hiddenfl):
return win_screen(request, game_data, serial)
else:
return display_game_state(request, game_data,
bool(serial))
else:
return display_game_state(request, game_data, bool(serial))
#Fallback on generating a new puzzle
else:
return new_game(request)
def new_game(request):
#Get a random product from the product DB
try:
if not request.user.is_authenticated():
raise(IndexError)
newpuzzle =
Puzzle.objects.not expired)) .filter(presented on=None) .select related()
.order
_by('?')[0]
product - newpuzzle.product
category = product.category.name if not product.is_mystery else
"Mystery"
solution - product.name
starting_letters = newpuzzle.starting_letters
newpuzzle.on_present()
request.session["prize_serial"]=newpuzzle.serial
#Fall back on random generation
except IndexError:
product = Product.objects.select_related().order_by('?')[0]
category = product.category.name if not product.is_mystery else
"Mystery"
solution = product.name
starting_letters = brandoodles .make random (solution)
request.session["prize_serial"]=""
newgame_data - ['solution': solution,
'category': category,
'letters_hidden': starting letters}
request.session["current_puzzle"] = newgame_data
return display_game_state(request, newgame_data,
bool(request.session["prize_serial"]))
def display_game_state(request, game_data, prize_mode=False):
return render (request, 'main_page.html',
['puzzle':
brandoodles.render(game_data['solution'].upper(),
game_data['letters_hidden']),
'words': len(game_data['solution'].split()),
'category': game_data ['category'],
'demo': "Prize" if prize_mode else "Demo"))
CA 3028906 2019-01-04

-41-
def win_screen(request, game data, serial=None):
if serial:
try:
puzzle = Puzzle.objects.select_related().get(serial=serial)
except:
render(request, 'win_screen.html',
['product': game_data['solution'],
'product_name': game_dataPsolutionfl.split()))
else:
puzzle.on_win()
return render (request, 'win_screen.html',
['product': puzzle.product,
'product_name': puzzle.product.name.split(),
'price': "%0.2f" % (puzzle.product.price),
'discount_percent': "%0.0f" % (100*puzzle.discount),
Tdiscount_value': "%0.2f" %
(puzzle.discount_amount()),
'discounted_value': "%0.2f" %
puzzle.discounted_amount(),
'manufacturer': puzzle.product.manufacturer,
'retailers_left':
puzzle.product.retailers.all()[:2],
Iretailers_right':
puzzle.product.retailers.a11()[2:4],
'today': puzzle.won_on.strftime('%B %d, %Y'),
'expiry': puzzle.expiration.strftime('%x'),
'serial': serial])
else:
return render(request, 'win_screen.html',
['product': game_data['solution'],
'product_name': game_data['solution'].split()1)
II II 0
WSGI config for Brandoodles project.
This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable
named "application". Django's "runserver" and "runfcgi" commands
discover
this application via the ''WSGI APPLICATION'' setting.
Usually you will have the standard Django WSGI application here, but it also
might make sense to replace the whole Django WSGI application with a custom
one
that later delegates to the Django one. For example, you could introduce WSGI
middleware here, or combine a Django application with an application of
another
framework.
import as
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This
breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO SETTINGS NODULE"] = "Brandoodles.settings"
CA 3028906 2019-01-04

-42-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Brandoodles.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
from django.contrib import admin
from Brandoodles.retailers.models import Retailer
admin.site.register(Retailer)
from django.db import models
class Retailer(models.Model):
name - models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state = models.CharField(max_length--30)
zip_code = models.CharField(max_length=20)
country = models.CharField(max_length=50)
def unicode (self):
return self.name
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.exceptions import ObjectDoesNotExist
from django.contrib import messages
from django.contrib.auth import login, authenticate
from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordChangeForm
from Brandoodles.players.models import Player
from Brandoodles.players.forms import FullUserForm, UserDataForm,
PlayerDataForm
#The view which generates a user profile, along with change forms
@login_required
def user_profile(request):
user - request.user
if request.method == 'POST':
if "changeuserdata" in request.POST:
userform = UserDataForm(request.POST, instance=user)
if userform.is_valid():
*modify user
userform.save()
messages.success(request, "Account information updated.")
return render_profile(request, userform=userform)
elif "changepassword" in request.POST:
passwordform = PasswordChangeForm(user, request.POST)
if passwordform.is_valid():
CA 3028906 2019-01-04

-43-
#modify password
passwordform.save()
messages.success(request, "Password Changed.")
return render_profile(request, passwordform=passwordform)
elif "changeplayerdata" in request.POST:
playerform = PlayerDataForm(request.POST)
if playerform.is_valid():
#modify player
try:
player = user.player
playerform = PlayerDataForm(request.POST, instance=player)
playerform.save()
messages.success(request, "Player Info Changed.")
except:
playerform = PlayerDataForm(request.POST)
return render_profile(request, playerform=playerform)
return render_profile(request)
#The view for the registration form
def registration_form(request):
if request.method == 'POST':
userform = FullUserForm(request.POST)
playerform = PlayerDataForm(request.POST)
if userform.is_valid() and playerform.is_valid():
user=userform.save()
player=playerform.save(commit=False)
player.user=user.
player.save()
#Need to do it twice for the category preferences to take
player.category_preferences =
playerform.cleaned_datarcategory_preferences']
player.save()
messages.success(request, 'Account created.')
login (request, authenticate(username=user.username,
password=request.POST['password']))
return HttpResponseRedirect('/accounts/profile')
else:
userform = FullUserForm()
playerform = PlayerDataForm()
return render_registration(request, userform, playerform)
def render_profile(request, userform=None, playerform=None,
passwordform=None):
user = request.user
if not userform:
userform = UserDataForm(initial=l'first_name.: user.first_name,
'last_name': user.last_name,
'email': user.emaill)
if not passwordform:
passwordform = PasswordChangeForm(user)
try:
if not playerform:
player = user.player
prefs = [x.code for x in player.category_preferences.all()]
playerform = PlayerDataForm(initial=f'phone': player.phone,
'address': player.address,
'city': player.city,
CA 3028906 2019-01-04

-44-
'state': player.state,
'zip code': player.zip_code,
'country': player.country,
'dob': player.dob,
category preferences': prefs1)
return render(request, 'registration/user_profile.html',
l'userform': userform,
'passwordform': passwordform,
'playerform': playerform))
except ObjectDoesNotExist:
return render(request, 'registration/user profile.html',
l'userform': userform,
'passwordform': passwordform})
def render_registration(request, userform, playerform):
return render(request, 'registration/user_registration.html',
l'userform': userform,
'playerform': playerform})
from django.db import models
from django.contrib import admin
from django.forms import CheckboxSelectMultiple
from Brandoodles.players.models import Player
class PlayerAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: ['widget': CheckboxSelectMultiplel,
1
admin.site.register(Player, PlayerAdmin)
from django import forms
from django.contrib.auth.models import User
from django.forms import CheckboxSelectMultiple
from Brandoodles.products.models import Category
from Brandoodles.players.models import Player
class FullUserForm(forms.ModelForm):
def save(self, commit=True):
user=super(FullUserForm, self).save(commit=False)
user.set_password(self.cleaned_data[upassword"])
if commit:
user.save()
return user
class Meta:
model = User
fields = ['username', 'password', 'first_name', 'last name', 'email']
widgets - ['password': forms.PasswordInput)
class UserDataForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', llast_name', 'email']
class PlayerDataForm(forms.ModelForm):
class Meta:
CA 3028906 2019-01-04

-45-
model = Player
fields = ['phone',
'address',
'city',
'state',
'zip_code',
'country',
'dob',
'category_preferences']
from django.db import models
from django.contrib.auth.models import User
import datetime
from Brandoodles.products.models import Category
class Player(models.Model):
user - models.OneToOneField(User)
phone - models.CharField(max_length-20, blank=True)
address = mcdels.CharField(max_length=50, blank=True)
city = models.CharField(max_length=6, blank=True)
state = models.CharField(max length-30, blank=True)
zip_code = models.CharField(max_length=20, blank=True)
country = models.CharField(max_length=50, blank-True)
dob = models.DateField("Date of Birth", help_text-"Format is yyyy-mm-dd")
category_preferences = models.ManyToManyField(Category,
verbose_name="Preferences",
blank-True,
help text="")
def over_age(self, age=18):
return age < abs(self.dob - datetime.date.today()) / 365
def unicode (self):
return self.user. unicode
from django.contrib import admin
from Brandoodles.prizes.models import Puzzle
class PuzzleAdmin(admin.ModelAdmin):
list_display = ('serial', 'product', 'discount', 'date_added',
'expiration',
'presented_on', 'won_on')
admin.site.register(Puzzle, PuzzleAdmin)
from django.db import models
from picklefield.fields import PickledObjectField
import random
import string
import datetime
from decimal import Decimal
from Brandoodles.products.models import Product
CA 3028906 2019-01-04

-46-
serial digits = string.ascii_uppercase + string.digits
serial length = 6
MAX TRIES = 5 #Maximum tries to get a unique puzzle
class CouponExpiredManager(models.Manager):
def expired(self):
return self.filter(expiration ___ lt=datetime.date.today())
def not_expired(self):
return self.filter(expiration gte=datetime.date.today())
class Puzzle(models.Model):
starting letters = models.CharField(max_length=100)
product = models.ForeignKey(Product)
serial = models.CharField(max_length=20, unique=True)
discount = models.DecimalField(max_digits=5, decimal_places=4)
date_added = models.DateField()
expiration = models.DateField()
presented_on = models.DateField(null=True, blank=True)
won on = models.DateField(null=True, blank=True)
objects = CouponExpiredManager()
def is expired(self):
return self.expiraticn < datetime.date.today()
def discount_amount(self):
return self.discount * self.product.price
def discounted_amount(self):
return (1-self.discount) * self.product.price
def on_present(self):
self.presented_on = datetime.date.today()
self.save()
def on_win(self):
self.won_on = datetime.date.today()
self.save()
def unicode (self):
return self, serial
class Meta:
#This guarantees uniqueness but can cause errors
unique together = )'starting letters', 'product')
def make_puzzle_start(product, discount, expiration_date,
min_difficulty=0.5):
#Generate Unique Starting Puzzle
solo = prcduct.name.upper()
letters_used [x for x in set(soln) if not x.isspace()
and x not in string.punctuation]
max_to_show = int(round((1-min_difficulty) * len(letters_used)))
CA 3028906 2019-01-04

-47-
starting puzzle = None
tries - 0
while not starting puzzle:
tries = tries + 1
number_to_show = random.randint(0,max_to_show)
starting_puzzle = ".join(random.sample(letters used,
number_to_show))
if tries < MAX TRIES and \
Puzzle.objects.filter(starting_letters=starting_puzzle,
product=product).exists():
starting puzzle - None
#Generate Unique Serial Code
new_serial =
todaysyear = str(datetime.date.today().year)
while not new_serial:
new_serial = todaysyear[-2:] + \
".join([random.choice(serial_digits)
for i in range(0, serial length)])
if Puzzle.objects.filter(serial=new_serial).exists():
new_serial =
#Add the puzzle to the database
Puzzle.objects.create(starting_letters=starting_puzzle, product=product,
serial=new_serial, discount=discount,
date_added=datetime.date.today(),
expiration-expirationdate)
erial, discount-discount,
date_added=datetime.date.today(),
expiration-expirationdate)
# Django settings for Brandoodles project.
import os, decimal
def local_path(p):
return os.path.join(os.path.dirname( file ), p).replace(1\\', '/')
distribution_values = map(lambda x: decimal.Decimal(x)/10, range(1, 10))
initial_dist = zip(distribution_values, (200,170,150,130,110,90,70,50,30))
DEBUG = True
TEMPLATE DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@example.com1),
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': local_path(tbrandoodles.db1),
'USER': ",
'PASSWORD': ",
'HOST': ",
'PORT': ",
1
CA 3028906 2019-01-04

-48-
1
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS =[j
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'
# Language code for this installation. All choices can be found here:
# http://www.il8nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
SITE ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_Il8N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_LlON = True
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ -= True
# Absolute filesystem path to the directory that will hold user-uploaded
files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = local_path(Imedia')
# URL that handles the media served from MEDIA ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA URL = '/media/'
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = local_path('static')
# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
# List of finder classes that know how to find static files in
CA 3028906 2019-01-04

-49-
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
# Make this unique, and don't share it with anybody.
SECRET KEY = '2newabl3iau!)e+15^ysq&6-2*w5*-a=jar--=7f$7igt20#eo'
0 List of callables that know how to import templates from various sources.
TEMPLATE LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'Brandoodles.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'Brandoodles.wsgi.application'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or
"C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
local_path('templates')
)
INSTALLED APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'Brandoodles.products',
'Brandoodles.prizes',
'Brandoodles.retailers',
'Brandoodles.players',
)
CA 3028906 2019-01-04

-50-
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG-False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
10': 'django.utils.log.RequireDebugFalse'
1,
'handlers': {
'mail admins': {
'level': 'ERROR',
'filters': ['require_debug_false1],
'class': 'django.utils.log.AdminEmailHandier'
1,
'loggers': {
'django.request': {
'handlers': ['mail admins'],
'level': 'ERROR',
'propagate': True,
),
1
}
from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from Brandoodles.views import main_page
from Brandoodles.players.views import user_profile, registration_form
admin.autodiscover()
urlpatterns = patterns(",
#Admin site
url(r"adminP, include(admin.site.urls)),
#User auth pages
url(r'^accounts/login', 'django.contrib.auth.views.login'),
url(r'^accounts/logout', Idjango.contrib.auth.views.logout_then_login'),
url(r'^accounts/register', registration_form),
url(r'^accounts/profile', user_profile),
*Game-related pages
url(r1^$1, main_page),
) + static(settings.MEDIA URL, document_root=settings.MEDIA_ROOT)
import random
import textwrap
import string
puzzle_row_width - 16
puzzle_col_width = 4
CA 3028906 2019-01-04

-51-
def form(puzzle):
#String formatting for a puzzle
rows = puzzle.split() # Separate lines for each word
while len(rows) > puzzle_col_width:
rpairs = [".join(rows[i:i+2]) for i in range(len(rows)-1)]
mrow = 0
mien = len(rpairs[0])
for i in range(1, len(rpairs)):
curlen = len(rpairs[i])
if curlen < mien:
mien = curlen
mrow = i
rows = rows[:mrow] + [rpairs[mrow]] + rows[mrow+2:]
return rows
def make_random(solution, fraction_to_hide=0.75):
#Randomly generate a puzzle
letters used = [x for x in set(solution) if not x.isspace()
and x not in string.punctuation]
number_to_hide = int(round(fraction_to_hide * len(letters_used)))
starting letters = ".join(random.sample(letters_used, number_to_hide))
return starting_letters.upper()
def is_complete(letters hidden):
#Determine whether a puzzle is done
return not letters_hidden
def guess (letters_hidden, g):
#Process a guess toward completing the puzzle
g = g.upper()
return letters_hidden.replace(g, ")
def render(solution, letters_hidden):
*Produce a string representation of a solution
puzzle - solution
for c in letters_hidden:
puzzle = puzzle.replace(c, ')
return form(puzzle)
(% if user.is_authenticated %I
<p>Logged in as: [fuser.usernamel}.
<a href="/accounts/logout">Logout</a>
<a href="/accounts/profile">Profile</a></p>
1% else %I
<p> You are not logged in.
<a href="/accounts/login">Log In</a>
<a href="/accounts/register">Register</a></p>
1% endif %I
<html>
<body>
I% if messages %I
<ul class="messages"
{% for message in messages %)
<III% if message.tags %I class="{(message.tags }}"{% endif %}>{{ message
}Kill>
{% endfor %I
</ul>
CA 3028906 2019-01-04

-52-
{% endif%}
User: ff user.username II
<hr width="100%">
<form method="post">(% csrf_token %)
ff userform.as_p II
<input type="submit" value="Change User Data" name="changeuserdata"/>
</form>
<hr width="100%">
<form method="post">{% csrf_token %)
ff passwordform.as_table II
<input type="submit" value="Change Password" name="changepassword"/>
</form>
f% if playerform %I
<hr width="100%">
<form method="post">{% csrf_token %}
ff playerform.as_p II
<input type="submit" value-"Change Player Profile"
name="changeplayerdata"/>
</form>
{96 endif %}
<hr width="100%">
<a href="/">Start Playing</a>
</body>
</html>
f% if form.errors %I
<p>Your username and password didn't match. Please try again.</p>
f% endif %I
<form method="post" action="f% url 'django.contrib.auth.views.login' %1"
f% csrf token %I
<table>
<tr>
<td>ff form.username.label_tag II</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>ff form.password.label_tag 11</td>
<td>f{ form.password }I</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }I" />
</form>
<html>
<body>
{% if messages %)
<ul class="messages"
f% for message in messages %I
<lif% if message.tags %I class="ffmessage.tags 11"{% endif %}>{{ message
(% endfor %}
</ul>
f% endif%I
<form method="post">{% csrf_token %I
{f userform.as_p I)
CA 3028906 2019-01-04

-53-
{{ playerform.as_p II
<input type="submit" value="Create Account"/>
</form>
</body>
</html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="/media/css/coupon.css" I>
</head>
<body>
<center> You Won <br>
{{ today II <br> </center>
<center>
Because you played <br>
<img src="/media/brandoodles_logo.png" id="brandoodles_logo"/></center>
{% if user.is_authenticated and serial %)
<center> Coupon ID: {{ serial 11 </center>
<div id="barcode"></div>
<center> Redeem this coupon for <br>
<strong>{{ discount percent }I% </strong> <br>
off the retail price of this item</center>
<img id="product_logo" src="/media/{{ product.picture }}"I>
<div id="product_name">
<big><big>{% for 1 in product_name %}
{{ 1 If <br>
{% endfor %)</big></big><br clear=all>
</div>
<hr width="100%">
<center> Redeem at these establishments <br>
for up to $ff discount_value II savings on this item. <br>
This offer expires: <br>
{{ expiry }I</center>
<div id="retailers_section">
<div id="retailers_left">
(% for r in retailers_left %)
If r.name <br>
{{ r.city I}, {1 r.state II, {{ r.zip_code I} <br><br><br>
f% endfor %I
</div>
<div id="retailers_right">
f% for r in retailers_right %I
If r.name II <br>
{{ r.city }I, If r.state }}, ff r.zip_code II <br><br><br>
f% endfor %I
</div>
<div id="retailers_center" align="centern>
<img align="center" width="20%" src="/media/{{ manufacturer.logo }}">
</div>
</div>
<br clear=a11>
<br>
{% else %}
<div id="product_name">
<big><big>{% for 1 in product_name %}
{{ 1 }} <br>
f% endfor %I</big></big><br clear=a11>
</div>
CA 3028906 2019-01-04

-54-
(% endif %}
<form name="newpuzzle" method="post" action=">
<input type="submit" name="newpuzzle" value="New Puzzle"
{% csrf_token -%}
</form>
{% include "login_info.html" %}
<script type="text/javascript" src="media/jguery-1.3.2.min.js"></script>
<script type="text/javascript" src="media/jguery-barcode.js"></script>
<script type="text/javascript"
$("#barcode").barcode("{{ serial }}", "code128")
</script>
</body>
</html>
<html>
<body>
<form method="post" action="{{ path }}">{% csrf_token %}
<table>
{{ form.as_table II
</table>
<p>
<input type="hidden" name="action" value="generate_puzzles" />
<input type="submit" name="make puzzles" value="Make Puzzles" I>
</p>
</form>
</body>
</html>
<html>
<body>
Mode: {{ demo }}<br>
Category: {{ category }}<br>
Words: {{ words }}<br>
<br>
{% for 1 in puzzle %)
fi 1 II <br>
{96 endfor %I
<br>
<form name="guess" method="post" action=">
<input type="text" name="guess"/>
<input type="submit" value="Guess"
{% csrf_token %}
</form>
<form name="newpuzzle" method="post" action=">
<input type="submit" name="newpuzzle" value="New Puzzle"
(% csrf_token %)
</form>
{% include "login_info.html" %}
</body>
</html>
CA 3028906 2019-01-04

Representative Drawing
A single figure which represents the drawing illustrating the invention.
Administrative Status

For a clearer understanding of the status of the application/patent presented on this page, the site Disclaimer , as well as the definitions for Patent , Administrative Status , Maintenance Fee  and Payment History  should be consulted.

Administrative Status

Title Date
Forecasted Issue Date 2022-01-11
(22) Filed 2019-01-04
(41) Open to Public Inspection 2019-07-10
Examination Requested 2021-03-03
(45) Issued 2022-01-11

Abandonment History

There is no abandonment history.

Maintenance Fee

Last Payment of $100.00 was received on 2023-12-22


 Upcoming maintenance fee amounts

Description Date Amount
Next Payment if small entity fee 2025-01-06 $100.00
Next Payment if standard fee 2025-01-06 $277.00

Note : If the full payment has not been received on or before the date indicated, a further fee may be required which may be one of the following

  • the reinstatement fee;
  • the late payment fee; or
  • additional fee to reverse deemed expiry.

Patent fees are adjusted on the 1st of January every year. The amounts above are the current amounts if received by December 31 of the current year.
Please refer to the CIPO Patent Fees web page to see all current fee amounts.

Payment History

Fee Type Anniversary Year Due Date Amount Paid Paid Date
Application Fee $200.00 2019-01-04
Maintenance Fee - Application - New Act 2 2021-01-04 $50.00 2020-12-23
Request for Examination 2024-01-04 $408.00 2021-03-03
Final Fee 2022-02-01 $153.00 2021-11-29
Maintenance Fee - Application - New Act 3 2022-01-04 $50.00 2021-12-21
Maintenance Fee - Patent - New Act 4 2023-01-04 $50.00 2022-12-02
Maintenance Fee - Patent - New Act 5 2024-01-04 $100.00 2023-12-22
Owners on Record

Note: Records showing the ownership history in alphabetical order.

Current Owners on Record
DORIS, ERROL S., SR.
Past Owners on Record
None
Past Owners that do not appear in the "Owners on Record" listing will appear in other documentation within the application.
Documents

To view selected files, please enter reCAPTCHA code :



To view images, click a link in the Document Description column. To download the documents, select one or more checkboxes in the first column and then click the "Download Selected in PDF format (Zip Archive)" or the "Download Selected as Single PDF" button.

List of published and non-published patent-specific documents on the CPD .

If you have any difficulty accessing content, you can call the Client Service Centre at 1-866-997-1936 or send them an e-mail at CIPO Client Service Centre.


Document
Description 
Date
(yyyy-mm-dd) 
Number of pages   Size of Image (KB) 
Maintenance Fee Payment 2020-12-23 1 33
Claims 2021-03-03 2 80
PPH OEE 2021-03-03 1 50
PPH Request 2021-03-03 12 444
Examiner Requisition 2021-03-19 5 218
Interview Record with Cover Letter Registered 2021-04-19 1 16
Amendment 2021-06-29 10 342
Amendment 2021-06-30 8 246
Claims 2021-06-29 2 67
Description 2021-06-30 54 2,130
Interview Record Registered (Action) 2021-07-29 1 17
Amendment 2021-07-28 7 189
Claims 2021-07-28 2 66
Final Fee 2021-11-29 4 137
Representative Drawing 2021-12-10 1 17
Cover Page 2021-12-10 1 48
Electronic Grant Certificate 2022-01-11 1 2,527
Abstract 2019-01-04 1 15
Description 2019-01-04 54 2,056
Claims 2019-01-04 3 86
Drawings 2019-01-04 23 1,375
Representative Drawing 2019-06-11 1 17
Cover Page 2019-06-11 1 46
Office Letter 2024-03-28 2 191