Right to Exercise: The Option shall not be exercisable as of the Date of Grant. The Option shall become exercisable in respect of 20% of the Option Shares on each of June 17, 2005 and June 17, 2006, and in respect of 5.0% of the Option Shares on each September 17, December 17, March 17 and June 17 thereafter, commencing September 17, 2006 and ending June 17, 2009, in each case if the Optionee remains in the continuous employment of the Company through such date. Notwithstanding the foregoing, (i) in the event of Optionee's Involuntary Termination (as defined in that certain Employment Agreement dated as of July 1, 2004, between Optionee and Bear Creek Corporation) before June 17, 2006, the portion of the Option that would have become exercisable as provided above through June 17, 2006, to the extent not already exercisable as provided above, will become immediately exercisable as of the date of such Involuntary Termination and (ii) in the event of Optionee's death, the portion of the Option that will be exercisable subsequent to such death as provided in Section 6 of this Agreement will be calculated as if the Option becomes exercisable in respect of 25% of the Option Shares on each of June 17, 2005 and June 17, 2006, and in respect of 6.25% of the Option Shares on September 17, 2006 and the 17th day of each third calendar month thereafter.
/s/ George L. Majoros, Jr.
7. Effect of Certain Transactions. In the event of a Change in Control (as defined in the Employment Agreement), the Option (or portion thereof that has not become exercisable as provided above before such Change in Control) will become immediately exercisable as of the date of such Change in Control. Notwithstanding the foregoing, the initial public offering of the Company's capital stock under the Securities Act of 1933, as amended, will not constitute a Change in Control. The Company shall give written notice to the Optionee of a Change in Control at least 10 days prior to the effective date of such Change in Control.
Fair Market Value of the shares, determined as provided in Section 8(c). The Company may assign the Repurchase Right to one or more persons or legal entities. Upon exercise of the Repurchase Right in the manner provided in this Section 8(a), the Optionee shall deliver to the Company the stock certificate or certificates representing the Option Shares being repurchased, duly endorsed and free and clear of any and all liens, charges, and encumbrances.
(c) Determination of Fair Market Value. For purposes of this Section 8, the Fair Market Value of the Option Shares shall be determined as of the date of the Repurchase Event by the Board.
or all of such Company Option Shares, it shall be obligated to purchase, and the Optionee shall be obligated to sell to the Company, such Company Option Shares at the price and terms indicated in the Offer within 30 days after the date of delivery by the Company of such counter notice.
issue and other taxes in the nature thereof which may be payable by the Company in respect of any issue or delivery upon a purchase pursuant to this Option.
18. Relation to Plan. This Agreement is subject to the terms and conditions of the Plan. In the event of any inconsistency between the provisions of this Agreement and the Plan, the Plan shall govern. Capitalized terms used herein without definition shall have the meanings assigned to them in the Plan. The Board acting pursuant to the Plan, as constituted from time to time, shall, except as expressly provided otherwise herein, have the right to determine any questions which arise in connection with this Option or its exercise.


Lights for a Cause is a unique way to celebrate, honor and bring awareness to a variety of causes, holidays and special occasions. By showing support and acknowledgement, Lights for a Cause is dedicated to shining brightly for all mankind.
'Lights for a Cause' was founded as a way to bring awareness, support, and festivity to organizations, national holidays, special events and community campaigns. Every time The Five Hundred lights up for a cause, I'm truly honored and humbled to see The Five Hundred shine brightly in Palm Springs.


text:
Central European Journal of Chemistry
May 2013 , Volume 11, Issue 5, pp 782–789 | Cite as
Effect of hydrothermal treatment on the structure of an aluminosilicate polymer
Jaroslav Melar
Vratislav Bednarik
Roman Slavik
Miroslav Pastorek
First Online: 27 February 2013
The effect of hydrothermal treatment on the structure of an aluminosilicate polymer prepared by a polycondensation reaction between silicate and hydroxoaluminate in alkaline aqueous solution was studied. The structural changes were investigated using X-ray diffraction analysis, Fourier-transform infrared spectroscopy, scanning electron microscopy imaging and thermogravimetric analysis. The results indicated that the amorphous aluminosilicate polymer transformed into a crystalline product during the hydrothermal treatment at 145°C. The crystalline phase was identified as a mineral of the zeolite group, most likely phillipsite. This transformation required an alkaline environment during the hydrothermal treatment.
Aluminosilicate polymer Zeolite Hydrothermal treatment Polycondensation Geopolymerization
G. Kosova, Chemicke listy 99(6), 411 (2005) (in Czech with English summary)Google Scholar
P. Payra, P.K. Dutta, In: S.M. Auerbach, K.A. Carrado, P.K. Dutta (Eds.), Zeolites: A primer. Handbook of Zeolite Science and Technology (Marcel Dekker, New York, 2003)Google Scholar
H. Grabherr, J. Anim. Physiol. Anim. Nutr. 93(2), 221 (2009)CrossRefGoogle Scholar
J. Davidovits, J. Therm. Anal. 37(8), 1633 (1991)CrossRefGoogle Scholar
B. Majidi, Materials Technology 24(2), 79 (2009)Google Scholar
H. Xu, J.S.J. Van Deventer, Int. J. Miner. Process. 59(3), 247 (2000)CrossRefGoogle Scholar
H. Wang, H. Li, F. Yan, Colloids and Surfaces A-Physicochemical and Engineering Aspects 268(1–3), 1 (2005)Google Scholar
Y. Zhang, W. Sun, Z. Li, Colloids and Surfaces A-Physicochemical and Engineering Aspects 302(1–3), 473 (2007)Google Scholar
S. Andini, R. Cioffi, F. Colangelo, T. Grieco, F. Montagnaro, L. Santoro, Waste Management 28(2), 416 (2008)CrossRefGoogle Scholar
R. Slavik, V. Bednarik, M. Vondruska, A. Nemec, J. Mater. Process. Technol. 200(1–3), 265 (2008)CrossRefGoogle Scholar
W. Mozgawa, J. Deja, J. Molec. Struct. 924-26(SI), 434 (2009)CrossRefGoogle Scholar
T. Hanzlicek, M. Steinerova, P. Straka, I. Perna, P. Siegl, T. Svarcova, Mater. Design 30(8), 3229 (2009)CrossRefGoogle Scholar
D.C. Comrie, J.H. Paterson, D.J. Ritcey, 3rd International Conf. on New Frontiers for Hazardous Waste Management, Pittsburgh, September 10–13, 1989 (Proceedings, 161–165, 1989)Google Scholar
D.S. Perera, M.G. Blackford, E.R. Vance, J.V. Hanna, K.S. Finnie, C.L. Nicholson, 28th Symposium on the Scientific Basis for Nuclear Waste Management, MRS Spring Meeting, San Francisco. April 13–16, 2004 (Proceedings, 2004)Google Scholar
K. Ikeda, Developments in Porous, Biological and Geopolymer Ceramics: Ceramic Engineering and Science Proceedings 28(9), 293 (2008)Google Scholar
T. Lin, D. Jia, M. Wang, P. He, D. Liang, Global NEST Journal 32(1), 77 (2009)Google Scholar
H.W. Nugteren, V.C.L. Butselaar-Orthlieb, M. Izquierdo, Bulletin of Materials Science 11(2), 155 (2009)Google Scholar
P. De Silva, K. Sagoe-Crenstil, Cement and Concrete Research 38(6), 870 (2008)CrossRefGoogle Scholar
P.S. Singh, Materials Science and Engineering A — Structural Materials Properties Microstructure And Processing 396(1–2), 392 (2005)CrossRefGoogle Scholar
P.V. Krivenko, G.Y. Kovalchuk, J. Mater. Sci. 42(9), 2944 (2007)CrossRefGoogle Scholar
D. Kolousek, J. Brus, M. Urbanova, J. Andertova, V. Hulinsky, J. Vorel, J. Mater. Sci. 42(22), 9267 (2007)CrossRefGoogle Scholar
B. Zhang, K.J.D. Mackenzie, I.W.M. Brown, J. Mater. Sci. 44(17), 4668 (2009)CrossRefGoogle Scholar
C. Villa, E.T. Pecina, R. Torres, L. Gomez, Construction and Building Materials 24(11), 2084 (2010)CrossRefGoogle Scholar
V. Bednarik, M. Vondruska, R. Slavik, J. Melar, Inorganic Reaction Mechanisms 6(4), 327 (2008)Google Scholar
F.A. Miller, C.H. Wilkins, Anal. Chem. 24(8), 1253 (1952)CrossRefGoogle Scholar
G. Socrates, Infrared characteristic group frequencies tables and charts, 2nd edition (John Wiley & Sons, Chichester, 1998) 206–225Google Scholar
E. Garand, T. Wende, D.J. Goebbert, R. Bergmann, G. Meijer, D.M. Neumark, K.R. Asmis, J. Amer. Chem. Soc. 132(2), 849 (2010)CrossRefGoogle Scholar
C.A. Rios, C.D. Williams, Fuel 87(12), 2482 (2008)CrossRefGoogle Scholar
J. Davidovits, Geopolymer Chemistry & Applications (Institut Geopolymere, Saint-Quentin, France, 2008) 61–75Google Scholar
M. Criado, A. Fernandez-Jimenez, A.G. De La Torre, M.A.G. Aranda, A. Alomo, Cement and Concrete Research 37(5), 671 (2007)CrossRefGoogle Scholar
R.A. Sheppard, J.J. Fitzpatrick, Clays and Clay Minerals 32(3), 243 (1989)CrossRefGoogle Scholar
J.E. Garcia, M.M. Gonzalez, J.S. Notario, J.M. Caceres, Reactive Polymers 19(3), 225 (1993)CrossRefGoogle Scholar
L.P. van Reeuwijk, Landbouwhogesch Wageningen 74(9), 1 (1974)Google Scholar
© Versita Warsaw and Springer-Verlag Wien 2013
1.Department of Environment Protection Engineering, Faculty of TechnologyTomas Bata University in ZlinZlinCzech Republic
2.Department of Polymer Engineering, Faculty of TechnologyTomas Bata University in ZlinZlinCzech Republic
Melar, J., Bednarik, V., Slavik, R. et al. cent.eur.j.chem. (2013) 11: 782. https://doi.org/10.2478/s11532-013-0204-9
First Online 27 February 2013
Publisher Name SP Versita

redpajama_set_name: RedPajamaCommonCrawl


text:
package com.daimajia.slider.demo;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.daimajia.slider.library.Animations.DescriptionAnimation;
import com.daimajia.slider.library.Indicators.PagerIndicator;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.TextSliderView;
import com.daimajia.slider.library.Tricks.ViewPagerEx;

import java.util.HashMap;

public class MainActivity extends ActionBarActivity implements BaseSliderView.OnSliderClickListener, ViewPagerEx.OnPageChangeListener{

    private SliderLayout mDemoSlider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDemoSlider = (SliderLayout)findViewById(R.id.slider);

        HashMap<String,String> url_maps = new HashMap<String, String>();
        url_maps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg");
        url_maps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png");
        url_maps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg");
        url_maps.put("Game of Thrones", "http://images.boomsbeat.com/data/images/full/19640/game-of-thrones-season-4-jpg.jpg");

        HashMap<String,Integer> file_maps = new HashMap<String, Integer>();
        file_maps.put("Hannibal",R.drawable.hannibal);
        file_maps.put("Big Bang Theory",R.drawable.bigbang);
        file_maps.put("House of Cards",R.drawable.house);
        file_maps.put("Game of Thrones", R.drawable.game_of_thrones);

        for(String name : file_maps.keySet()){
            TextSliderView textSliderView = new TextSliderView(this);
            // initialize a SliderLayout
            textSliderView
                    .description(name)
                    .image(file_maps.get(name))
                    .setScaleType(BaseSliderView.ScaleType.Fit)
                    .setOnSliderClickListener(this);

            //add your extra information
            textSliderView.bundle(new Bundle());
            textSliderView.getBundle()
                        .putString("extra",name);

           mDemoSlider.addSlider(textSliderView);
        }
        mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
        mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
        mDemoSlider.setCustomAnimation(new DescriptionAnimation());
        mDemoSlider.setDuration(4000);
        mDemoSlider.addOnPageChangeListener(this);
        ListView l = (ListView)findViewById(R.id.transformers);
        l.setAdapter(new TransformerAdapter(this));
        l.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                mDemoSlider.setPresetTransformer(((TextView) view).getText().toString());
                Toast.makeText(MainActivity.this, ((TextView) view).getText().toString(), Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    protected void onStop() {
        // To prevent a memory leak on rotation, make sure to call stopAutoCycle() on the slider before activity or fragment is destroyed
        mDemoSlider.stopAutoCycle();
        super.onStop();
    }

    @Override
    public void onSliderClick(BaseSliderView slider) {
        Toast.makeText(this,slider.getBundle().get("extra") + "",Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_custom_indicator:
                mDemoSlider.setCustomIndicator((PagerIndicator) findViewById(R.id.custom_indicator));
                break;
            case R.id.action_custom_child_animation:
                mDemoSlider.setCustomAnimation(new ChildAnimationExample());
                break;
            case R.id.action_restore_default:
                mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
                mDemoSlider.setCustomAnimation(new DescriptionAnimation());
                break;
            case R.id.action_github:
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/daimajia/AndroidImageSlider"));
                startActivity(browserIntent);
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

    @Override
    public void onPageSelected(int position) {
        Log.d("Slider Demo", "Page Changed: " + position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {}
}

redpajama_set_name: RedPajamaGithub


The study goes on to suggest how this might be accomplished. David Foster was very complimentary of our own "Island Plan", referencing it a number of times for its depth and foresight and similarities to his own work. To me, this was very gratifying, confirming just how far out in front we are on many of these important conservation issues. It also confirmed the importance of working in the years ahead to implement the strategies set out in the Island Plan.
Two other issues which align with our mission at VCS, climate change and self-sufficiency, are also addressed in the Harvard Forest report. Trees are really good at sequestering carbon, and will play a critical role in the carbon cap and trade strategies being discussed nationally and internationally. As for living more locally, presently, 95% of our building lumber (along with most of our food) comes from outside of New England; making better economic use of our own timber resource makes sense. All good reasons to preserve our wildlands and woodlands.


The Paradise Valley Golf Shop is your one-stop-shop for all your golfing needs! From custom fitted clubs to golf shoes and hats, we have you covered! We have a wide selection of merchandise from companies including Titleist, Ping, TaylorMade, FootJoy, Adidas and Cutter & Buck to name a few. Our staff is always on hand to assist you with any questions or merchandise needs. In addition, if we don't have the size or style you're looking for, we can always special order the item(s) you are seeking. We look forward to seeing you soon!


Inspirational Child Support Settlement ... .
Child Support Agreement Contract ... .
Child Support Agreement Letter ... .
Child Support Agreement Template ... .
Letter For Child Support ... .
Free Sample Child Support ... .
Child Support Letter From ... .
Custody Agreement Letter – Kappalab .
Saas Contract Template Best ... .
Child Support Contract Template ... .
Child Support Agreement Sample ... .
Child Support Template Child ... .
√ Sample Child Support Agreement ... .
Child Support Letters Sample ... .
Documents Ideas - Seocopywriting2500.... .
Child Support Letter Agreement ... .
No Child Support Agreement ... .
Sample Bonafide Marriage Apelle ... .
50 New Financial Support Agreement ... .
Voluntary Child Support Agreement ... .
Dealing With The Children's ... .
Child Support Template Notary ... .
Standard Graphic Design Contract ... .
51 New Voluntary Child Support ... .
Notarized Letter For Child ... .
Child Support Receipt Template ... .
42 Lovely Pictures Of Free ... .
10 Awesome Sample Child Support ... .
Sample Letter For Child ... .
Child Visitation Agreement Template ... .


If You Love Bitcoin, Altcoins, Cryptocurrencies, And Blockchain Technology? If Yes, Then You've Landed On The Best Page Of The Internet. Welcome!
HowCoinswork is a New community of Crypto Users from across the globe. And definitely, it's a work in progress that's why I welcome you to be a part of this growing community to make it even more worthwhile.
If your news to the Cryptocurrency world check out some Beginner Guides to Start with Bitcoins or Other currencies.


More than 50% of Australian are shopping online. Items such as clothes, shoes, accessories and even travel related purchases are done online. Most of the time, they search for information about the product and services before they buy them.
According to The 18th Edition of Nielsen's Annual Australian Connected Consumers Report, almost all of Australians use the internet to purchase items every week. If you are a marketer, you know that in order to reach a wider audience you need to be where your prospects are. So how would you know what channel to use to communicate and engage with your prospects?
Here are some of the preferred modes of communication of Australian prospects according to statistics.
Social media is a way for businesses to communicate, engage and interact with potential and existing customers. Based on Sensis Social Media Report for 2016, Australians are now spending more than half a day per week (12.5 hours) on Facebook alone, up four hours from last year.
It is best to know and understand who your target prospects are and their preferred channel to use when searching for a product or service. For example, if you are targeting younger people between 18-29 years old, you must know that their preferred mediums to use are Facebook and Instagram. On the other hand, people between 40 to 49 years old use LinkedIn and Google+.
Facebook – 95% of Facebook users spend more than 12 and half hours every week on Facebook.
Twitter – At 19%. 2 points higher than last year.
Instagram – Almost doubled its reach at 31% since 2013. This is used by 58% of the younger audience between 18-29 years old.
LinkedIn – 24% lower because of its many restrictions. Commonly used by medium and large businesses.
Here's the secret ingredient in turning your social followers into qualified leads.
They can't live and won't leave home without a mobile phone. More and more people globally use mobile phones to communicate and talk to a family member, friends, discuss work, check and respond to their emails, and learn about what's new in technology, etc.
According to the mobile statistics in Australia from IAB Australia (Mobile Ratings September 2015), smartphones and tablet owners, internet surfing trends and the total time spent on mobile devices continues to increase.
The result of the Google Consumer Barometer Survey says that 40% of millennials (ages 35 and up) do their research and purchases on smartphones and other mobile devices.
According to a blog post from campaignbrief.com, 97% of Australians use emails and sending or receiving email was the most popular activity on the web.
Others are doing online banking or paying bills and reading news and about sports.
Respond to inquiries and solve customer's problems faster. Show Customer Care with Inbound Lead Qualification.
While 84% are looking for information on products and services.
Whether a formal or informal way of communication, prospects have a preference as to which channel to use to communicate and search for products and services. Use these stats as your guide in choosing which channel to include in your marketing campaign. Whatever you decide, bottom line is, you have to be where your prospects are at all times.


7. Still in the shower...since the little shelf built into the shower wall is worse than useless, something had to be done.
Picked up this 3 chamber soap/shampoo dispenser on Amazon Prime. It is made to fit in the corner, and comes with its' own adhesive.
I was doubtful that it would stay in place with all the bouncing around on the road, especially with all 3 chambers filled, but it has held up fine so far.
8. There is no mirror anywhere in the trailer. Mary searched for a long while to find one that was not too heavy, and would fit in some available wall space.
She found this 16" x 16" and hung it on the wall right outside the bathroom. Perfect!
9. Another little convenience are two stools. There is one fold-able couch/bed in the trailer. It can seat 3 people, 2 very comfortably. We wanted more options on seating.
Not something you'd want to sit on all afternoon or evening, but if we have guests for a little while and want some extra seating, they have worked out well.
They also work very well as foot stools for Mary and I when sitting on the couch!
AND...they double as storage, the padded seat comes off and we have used one as a dirty clothes hamper and the other to store a variety of things. They also slide easily under the couch, out of the way.
In less than 10 seconds they fold back out to a usable stool/storage container.
10-12. Pictured below is a paper towel holder, dish towel hook, and trash can.
We tried out several locations for a paper towel holder...each location was convenient for the paper towel access, but interfered with access to something else. Finally settled on the side of the kitchen cabinet, right below the counter.
It was also a good location for a dish towel hook, and importantly let us get a trash can that would open and close without hitting the roll of paper towels.
13. At the head of the bed is a 110 outlet. I removed it and replaced it with a 110V outlet/dual USB port combo.
I know it's crooked. I need to pull it back out and tweak the romex a bit so it will sit flush.
14. This next project was a big one, and took a while to figure out. We tossed around a lot of different ideas.
We needed more USB ports, and some 12v power point receptacles. We also needed somewhere to keep USB cables while not in use, AND we need some where to set the devices while they were plugged into the USB ports getting recharged.
And we wanted this "station" to be below the TV.
We searched around quite a bit for something we could buy that did all this. We also looked for multiple components that we could buy, that together would do all the above.
No luck. So we decided to build our own.
We purchased a Sorbus 3-Tier Bamboo Shelf Organizer for Desk with Drawers. We also purchased a 4 port USB, a dual port USB with 12v receptacle and a stand alone 12v receptacle.
We then installed all three receptacle units in the top drawer of the organizer, hiding all the wires in that top drawer.
This left us the top shelf to set things (phones, etc.) on, and the bottom two drawers to store wires in.
We used self-adhesive felt pads on the drawers to keep them from sliding open while going down the road. Works perfectly, they open easily when pulling on them, but stay closed otherwise.
We then secured the entire power station to the bottom of the TV cabinet with some 1x1.5 and some L brackets on either side and the back.
This as worked extremely well and is very convenient.
I will get some pics of the wiring to the fuse box and post that up soon.
More to come as I take more photos and have time to post.
Great job on the USB fixture!!
Again, nice work! I like your wonderful ideas. Going to use some myself! The USB thing is awesome.
Now, What would you like done?
Nice job on your mods! As you have found out once you start it's hard to stop .
Thank you! Yeah, we are really happy with how it turned out. It gets a lot of use, and is very convenient.
Thank you. Yes, it is a sickness.
15. One other thing in the shower...the soap we normally use takes a lot of water to rinse off.
Being aware of fresh tank and gray tank limitations, Mary did some research and found some Castile soap. It cleans well, and rinses off easily. We like it so much we have switched to it at home also.
16. Being as I still work, even while on the road, maintaining an internet connection is important for me. There are some places that my cell signal (for hotspot) is not strong enough.
I purchased the weBoost Drive Sleek 470135 Cell Phone Signal Booster and a Wilson Electronics 311125 Dual-Band Magnet Mount Cellular Antenna to use for those times when I need some extra signal.
I put a velcro patch on the back corner of the roof, and when needed I just slip the antenna out the back door and onto the velcro.
It's there when we need it, and completely out of the way the rest of the time.
17. We purchased a cutting board to give more counter space when not using the stove.
There were no legs to hold it over the burners, so we made them some. Added some non-slip material to them. Works great!
18 & 19. Since we pull the motorcycle in here on some trips we decided to protect the floor with cushioned interlocking mats. I use these in my shop and they are very comfortable...and they protect the floor.
Turns out it is a very good insulator also. We've been in temps in the mid 20's and the mats are not cold...but the floor below the mats feels like an ice cube!
Also pictured is one of the two throw rugs Mary added to make it more "homey".
20. Mary has 4 of these self adjusting Spring Tension rods in various place, to keep stuff where she wants it.
21. Above the freezer there was a panel. I suspected nothing was behind it, and that we could easily put a shelf there.
Well, I was right AND wrong.
There was a bunch of empty space, but making a shelf was NOT easy. It was truly a PITA that I wished I never started. Very little room to work to make a supporting frame for the shelf.
Will post up more mods as I have time.
22. Under the bed is the pass thru cargo area, accessed by cargo doors on either outside walls of the trailer. Also under the bed is the water heater. It is enclosed, taking about 1/6th of the space under the bed.
We decided we wanted more storage space that was accessible from Inside. So I built two walls, adjoining one of the hot water heater walls. This gave us access to about 1/4th of the cargo pass space from inside, but still left substantial space in the pass thru.
I then cut a hole on the existing inside wall for a door.
We then made a door from scratch, using luan paneling, other wood and the same decorative molding that was used on the shelf above the fridge.
It is a large storage space. 20" deep, 20" tall and 48" wide.
In this next photo, the wall seen on the left is where the compartment butts up against one of the already existing water heater walls.
This is a view of the outside of one of the storage walls, looking from inside the pass thru cargo area.
23. We put down some carpet in the remaining cargo pass thru space.
We have our leveling blocks, tire chocks, tools, air compressor, back up battery charger, folding chairs, fresh water hose, filter, pressure regulator, electrical adapters, and misc. other items in here. We are still not using even half the available space.
24. Going back inside. We have a cutting board that covers one side of the double sinks when needed, and a container that fits in the other side of the sink. These are both easily removed when both sides of the sink are needed.
However, the container mostly stays in place. Being as we have been boondocking quite a bit, many times water that is used stays in the container and is then put into the black tank, or tossed outside.
We have 49 gallons fresh water, 33 gallons gray and 33 gallons black. Between showers and kitchen the gray would fill up much faster than the black, so we try and even that out a bit.
25. While talking about tanks. We plan on using the trailer year round, and we wanted to use ALL of the trailer features. So, we knew we had some work to do regarding below freezing temps.
First up was unbolting a couple of the fresh water tank support brackets, and then enough of the coraplast underbelly to get to the fresh water tank.
The white thing in the photo is the 49 gallon fresh water tank. It was a PITA to get to.
After taking this pic I installed a Facon 7 1/4"x25" Water Holding Tank Heater Pad right onto the tank.
It was a bit of an irritating job reaching up in there and I completely forgot to take any photo's once it was installed.
It has a Built in thermostat, set to turn itself on at 45°F( + - 5 degrees) and turn itself off at 68°F( + - 5 degrees).
After installing it we spray foamed all the joints where the coraplast meets the frame and re-attached the coraplast and then the 2 fresh tank support brackets that I had removed. Then did a bit more spray foam to seal up the underbelly.
All back together and I hope to never have to replace that heating pad.
We've already spent quite a bit of time in temps well below freezing and the tank heater has done its' job well. Coldest we've been in has been 22*.
We rarely expect to be in temps much colder than that. Although we have had a few days, where we live, when the temps got down to 10-15 degrees. I expect this will do the job down to those temps.
26. In addition to the tank heater, we had to do some other work on the plumbing to prevent freezing in the colder temps.
We used some Facon RV Camper Elbow Heater Pads.
I also wrapped the fresh tank drain with a 3x8 heater pad and then covered it with insulation. This may have been unnecessary since the tank already has the heating pad, but since the drain sticks out in the open, below the belly, better safe than sorry.
The last place I ran a 3x8 heater pad was around some pipe in the pass thru cargo area. This was probably unnecessary, since the cargo area does have quite a bit of warmth in it from the inside of the trailer. But again, better safe than sorry.
27. I ran all the wires, inside a corrugated wire loom, up to near the batteries.
I installed a waterproof 15 amp toggle switch onto the battery frame. I put a fuse between the heaters and the switch, and then wired the switch into the batteries.
For extra protection of the switch, I encased the entire bottom of it in Liquid Electrical Tape.
I also have an extra one of these switches in with my tools, should this one fail while on the road. Also, have extra elbow heater pads in with the tools should one fail while on the road. I do Not have an extra tank heater pad.
I do need to always remember to toggle the switch on when it is going to be cold. Even though the tank heater has a thermostat and could remain powered at all times, the elbow heaters are not thermostatically controlled.
I am thinking about putting an independent thermostat between the switch and the fuses. That way I will not need to remember to toggle the switch when we get close to freezing temps.
That's all for now, will post more when I have more time.
Been a busy week at the shop, no time to post.
28 & 29. The trailer came with one 12 volt/100 amp hour lead acid battery. It was centered in the battery tray behind the propane tanks.
I purchased a second 12 volt/100 amp hour battery and case, moved the existing one over and put in the second one.
Also, in the photo below, in the lower left corner there is a small white box zip tied to the battery tray. That is the TPMS signal repeater.
I thought about adding a third battery to the tray. But wanted to see how we would do with these two first. The two work well. We can easily go 3 days of normal use without firing up the generator or plugging into shore power, just with these two batts.
We have used all of the above for multiple days, never dropping below 50%, so I think we're good for now.
30. The first 7-8 times out it was less than optimum with Mary being in the trailer with a level and me being outside getting everything level.
...and the other is on the front cap for getting side to side level.
31. We quickly discovered that easy access AND Not having the poop tube in a container in the cargo area were both preferable.
Purchase & installation of a Valterra Products Inc Black 34"-60" hose carrier was easier and faster than making one out of PVC.
I did need to spend 20 minutes fabbing a bracket for the far side mount. The unit is not long enough to go from one side to the other.
Note: Even though the hinged end caps have a keeper, keeping the ends closed...they are plastic, so we added a carabiner clip on each side.
32. For grins and giggles I had my business partner pull the rig down the road with me riding in it.
I discovered that when 55 mph or faster that the pop out window at the front chatters a bit. This is because the wind is catching the leading edge of the window frame and pulling it out a bit, unseating it. It is enough that you can feel a good amount of air moving...and if it was raining, then water into the window frame and inside.
Solution was a bit of trim applied to the trailer side, right in front of the window. Now the air hits that and goes around. No more window leakage at speed.
Trim was applied with automotive grade double sided tape...same stuff used to hold emblems on autos and motorcycles.
While we were at it we put some of the same trim above the hinges on both cargo doors. Not sure how much protection it affords the hinges...but it can't hurt.
33. One of the first things we did was get a PROGRESSIVE INDUSTRIES SSP-30XL Surge Protector. It works.
Will post more mods soon!


Interventions/Control_1 Propofol infusion is injected intravenously with target controlled infusion system.
Key inclusion criteria Patients scheduled for elective surgery under general anesthesia.
Key exclusion criteria Drug or alcohol abuse, and hepatic or renal impairment.


text:
Q: Style from resource dictionary only works at design time I have some styles for common controls defined in a separate file / resource dictionary. The file is referenced in App.xaml and gets loaded at startup.
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary>
                <workbench:AppBootstrapper x:Key="bootstrapper" />
            </ResourceDictionary>
            <ResourceDictionary Source="Resources/Layout.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Resources/Layout.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:system="clr-namespace:System;assembly=mscorlib">
    <Style TargetType="Label" x:Key="Heading1">
        <Setter Property="FontSize" Value="{StaticResource Heading1FontSize}" />
    </Style>
</ResourceDictionary>

At design time, it works perfectly. However, when the application runs, no style ever gets applied. What could I be missing here?

A: How are you setting the style for all your label? Do you want the style to apply to all of your label or just specific label controls?
If you want it applied to all types of Label control then you have to remove the x:Key attribute in your Style tag.
If you want it to be specific for each Label control then you have to define the Style property of each Label Control and point it to using the key.
More information can be found here
Update
Try changing the Source to similar to this
pack://application:,,,/<AssemblyName>;component/Resources/Layout.xaml

redpajama_set_name: RedPajamaStackExchange


As this seems to be the closest thing to a Zobop E owners group, I thought I'd share a tip and ask a question.
The dropper post cable rubs on the suspension linkage, but you can undo it and feed it the inside suspension link and zip tie it to seat post to avoid this.
Anyone thought about going tubeless? Ghetto or otherwise?
The tips about the brakes are really useful, thanks.
What I did was, disconnect the dropper cable at lever end, pull the cable through the frame to remove all unneeded cable at the dropper post end, then cut the spare outer cable off near the leaver and cur the cable to suit. Nice neat tidy cable and no saggy bits rubbing on frame.
Hi there, I'm new to the forum but have owned a Zobop E for a few month now. It's undergone a few changes, 160mm Yari's on the front, Shimano 501 4 pot brakes, Saint discs and new wheels with DT Swiss M582 rims. I have to say it was the price that swung it for me in the end. i was looking at several bikes and spec wise nothing came close. Fit wise it's near perfect, the Moustache I tried felt too short. Handling wise I like the extra weight, with the plus size tyres it feels more planted, it feels as good as my Commencal Meta.
Alot of people knock the Voodoo brand, but this frame is made by Kenisis, you can see the full details here, http://www.kinesis.com.tw/en/product-548855/I8615-2018-27-5-Plous-Bosch-Cx-Suspension.html and the spec is really good value for money. Q uite possibly the bargain of the century if you ask me.I'll post up some pictures when the weather's better and it's had a clean.
Done well over 1000 miles on mine now, mostly trail/off road and it hasn't missed a beat, nothing wrong with the Voodoo brand for quality and value, hard to get that level of spec for that price.
Just noticed that the Zobop E has disappeared from the Halfords web site. Google finds it, but you can't navigate to it via the product selector on the Halfords web site and the in-site search facility doesn't find it.
Are they discontinuing it, or is it just a site glitch?
"Sorry - this product is unavailable right now".
It looks and feels like fibres emerging from the carcass sidewall, but there's no obvious abrasion marks in the vicinity. I have had a couple of punctures on that wheel recently, the second of which I had to fix out in the wilds, at which point I discovered that three 16g CO2 cartridges aren't really enough to reinflate a flat-as-a-pancake 27.5" x 2.8" tyre properly (anyone know a good source of 25g threaded cartridges at a sensible price?) It might be that the damage was caused by riding home with the tyre too low on air. So now I have to see if I can find a replacement at a reasonable price.
* CRC have dropped the price on that since the weekend when I bought it (not from them). Curse them! At least I didn't pay the RRP, anyway.


What a challenge this month's Printed Fabric Bee was! Queen Bee Leslie Jenison asked for Marks with Found Objects in neutrals with a pop of color. Neutrals are always a challenge for me. I work mostly in brights! What was I to do?!?!? I decided to mix a little Setacolor paint together and make a brown sun print for the background. Brown is a neutral, right?
How was I to make marks with found objects in a sun print? That part turned out to be quite simple. I grabbed leaves, grasses and whatever objects I found on the ground . . .
. . .and put them on top of the watered down wet paint, and then left it all in the sun until it dried.
I love leaving crinkles when I make sun prints.
Next came adding more marks with pops of color. I used my Gelli® plate as a paint palette by rolling out some orange Setacolor . . .
. . . and then laying down a piece of window screen on the plate. I rolled a dry brayer across the screen so it picked up the paint. . .
. . .and laid it onto the fabric to make random prints.
Next, I bunched up a piece of netting from a turkey bag and stamped marks.
I like how these look like bits of grass.
Lastly, using the Gelli® plate as a paint palette again, I dipped a pinecone into the paint and stamped away. I thought the color I printed the pinecones in was too bright so I printed over the top of them with white and I really like how that turned out.
This piece has been ironed, so all the "wrinkles" you see are from the sun printing.
Or on our Printed Fabric Bee Blog Post.
I love your approach to the theme! I love the subtle design the sun prints create!


Jason Hydraulics has been designing and manufacturing hydraulic cylinders, components and related equipment for nearly 50 years. With regular investments in new machinery, our factory in the UK combines the latest technologies with Lean production control systems. Our company produces over 45,000 hydraulic cylinders each year, along with custom designed hydraulic power units and complete hydraulic systems. With the capability to manufacture prototype cylinders and small batches through to large volume orders, find out more about how we can help.
Expert manufacture and design of bespoke hydraulic cylinders to match your specifications.
Custom built hydraulic power packs to suit any application, mobile or fixed.
Bespoke hydraulic system design and manufacture from the hydraulics experts.
Helpful and responsive customer service to keep your business running.


Ball-Pythons.net - MPS Reptiles shows off the gorgeous pair of leopard superstripe ball pythons that they produced.
RedtailBoa.net - This smoking hot salmon leopard boa constrictor owned by Colormorphs is absolutely amazing!
Ball-Pythons.net - ColdBlooded Addiction shows off some of the beautiful ball pythons they produced from a leopard spider x blonde blast pairing.
Morelia Viridis Forum - Check out photos of a gorgeous pair of green tree pythons and the four fantastic babies that they produced this season at Phoenix Reptiles.
Ball-Pythons.net - Stewart Reptiles shows off two terrific looking lesser leopard ball pythons from the same clutch that have very different patterns.


Just because something is old, it doesn't mean it's out of date or irrelevant. Yet most people tend to disregard or place less value on something that's not the latest and greatest gadget, invention or idea.
Obviously, technology continues to influence the way we work and even think but what about the rock solid proven ideas created back in time that still hold fast today.
We live in a busy world of constant white noise and interruptions and when it comes to marketing, it's increasingly difficult to be heard above the incessant scrambling of messages. We're overloaded.
So, the modern day marketer's dilemma is how to get noticed in a very busy world.
There's a tipping point for real estate success and it comes when someone has a busy schedule of listing presentations, listings, open homes and sales.
When an agent starts to get some volume in a specific geographic area, the marketing around the campaigns starts to build momentum.
There is more marketing, more signs, more signs pointing to open homes and more opportunities to connect with potential sellers. All it takes is 6 or 8 concurrent campaigns and people in your area will start to notice you.
Success creates success. More creates more and the activity generates some of the best awareness marketing there is.
I mean, what seller isn't going to be impressed with an agent who has a highly visible share of the market?
How do you penetrate a highly competitive market?
And how do you win the hearts and minds of potential selling clients in your area?
You do it the same way it's always been done, by building relationships one at a time.
But more often than not, agents approach this the wrong way.
They burn dollars and daylight on ideas that have little cut through and struggle to connect with the potential clients that matter most because they don't stand out and the real estate consuming public fails to spot any difference from one brand to the next.
What are the numbers like in your area?
Would there be any more than 3 or 4 percent of property owners in your area considering a real estate sale or purchase at any one time? I doubt it.
So in a residential area of say 2000 households, we could expect that just 60 to 80 might be looking to buy or sell at any one time with probably half that number actually on the market. Do they know you? Do you know them and how are you connecting?
But what if there was a way to connect with way more homeowners than just 3 or 4 percent because someone who has no intention of selling today might be highly motivated to get on the market by this time next week.
If money was no object, and you went to the very best advertising minds in the world, they would ask you this question: What's your Unique Selling proposition or USP? What's your clear and compelling point of difference in your market and why would potential sellers connect with you as opposed to other agents in your area.
They do this because finding the USP and packaging it into a simple yet powerful message is the fastest and most effective way to connect with your target market.
When I ask this question, agents tell me their USP is that they have a great following in their area, their company is well respected. They have a great deal of experience and they are terrific marketers and negotiators. All excellent points but hardly a USP because most of their competition could say the same thing.
I spent quite a bit of time and money developing my USP to break into a very crowded market in Melbourne's south east suburbs where sellers can chose from hundreds of agents all pitching to get noticed and secure that precious listing presentation appointment.
My research told me that sellers were looking for just 3 things. A top market price, a sale in a reasonable time and a rewarding and stress free real estate experience.
So I created a guide to show sellers how they could easily engineer these three results. The guide ended up becoming a book called How To Sell Your Home For More.
Because we're in real estate, it's difficult to market a service as opposed to a physical product but I found a book was the perfect way to package my USP with the added bonus that offering a free copy of the book was a powerful call to action.
I call this give to get marketing and it's one of the most effective marketing methods there is because offering something of value with no expectation of anything in return is a great way to become an attraction agent and reach out and connect with potential sellers in your area.
I quickly discovered the applications for my book are virtually unlimited. From a give away at opens to a point-of-difference gift in a pre-listing kit, How To Sell Your Home For More is loved and valued after 16 editions with more than 250,000 copies of the book in circulation.
And I can't mention the book without thanking so many Bestagents members who have found new and innovative ways to use the book as a dominant lead generator in their marketing line up.
And speaking of books, I recently re-read a book that was first published eighty years ago.
Written at the height of the Great Depression by Dale Carnegie, the book offers candid thoughts and ideas for reaching out and connecting with more people no matter what business you're in.
The book came about following Carnegie's public speaking course which he ran at a gym in New York from 1912 and the story behind the book is inspiring for a number of reasons.
After writing but failing to publish two previous books, Carnegie was reluctant to fail a third time but a publisher attending his course asked him to consider another book.
Carnegie said "no" but agreed to allow the publisher to bring a stenographer to the classes who wrote down everything he said.
When the notes were cleaned up, Carnegie liked what he saw and How To Win Friends And Influence People was published in a small print run of 5000 in 1937. Despite the depression, the book takes off because people are hungry for work skills and before long, it's selling at 5000 copies a day.
Today, this much loved best seller still totals over 200,000 sales a year because the ideas are just as relevant as they were in 1937.
But it's a Dale Carnegie quote that I love because it speaks to the very heart of effective marketing.
Let's bring that back to real estate marketing and connecting with more than just the 3 or 4% of people looking to buy or sell at any one time.
If you take an interest in others and profile them instead of profiling you, everything changes.
I'm the first to agree this might sound counter intuitive but that's exactly what I did with my book.
Today, savvy agents are connecting with more and more people in their community by getting interested in them and what they're doing instead of continually pitching the 'Look At Me' style of marketing that's so boring it's essentially invisible.
If you feature a local business on your website blog and Facebook page, you're automatically connecting with a far wider network because they'll be looking to share your generous promotional skills. After all, if you're in real estate you're a marketer, and you're simply showing off your marketing skills in a different way.
Think of the businesses you know and patronize in your own community. Is there a florist, chiropractor, hairdresser, café or mortgage broker you could profile and share their success with your community? It's an easy win-win!
Is there a fund raising event coming up at a local school where you can interview the principal? Everyone is looking for publicity and wanting to raise awareness so why not share your marketing skills and help them reach more people in your sphere of influence?
What about profiling a rising sports star and become part of their journey too. As they say, it takes a village and every community values anyone who can give them a voice.
Or what about starting your own community podcast because here's the thing: If you don't one of your competitors will and you'll lose a very valuable window in this exciting new digital economy.
Podcasting is exploding in popularity because it's a unique and powerful way to connect with people who want to hear your message and when your keep message about them and not you, you're profile and public awareness is raised by association.
A by-product of this kind of marketing is that your profile is raised simply by association and no amount of money can buy that much professional credibility.
Show folks you're more than just a real estate face on a bus bench sign offering free valuations with a big mobile number. This is the kind of marketing that literally hits people where they live and it will help you stand out like never before because you've just taken the bold initiative to position yourself as someone very different to other agents in your area.
And if you're not convinced, consider these final reasons why you need to get started on this, it's cheap and it has a long life!
Real estate is not about what you make but what you keep. All this is going to cost you is a little time and effort. You'll then have a video or website blog article that is working permanently to profile you and your efforts to promote and advance the community that allows you to make a living.
It's marketing dressed as altruism because everybody wins.
If you're ready to get started, send me a message and I'll help you take the all-important first step.
Thanks for tuning in to this episode, if you like the podcast, please subscribe on iTunes, Stitcher or wherever you listen to your podcasts and you'll automatically be the first to get each fresh episode and exclusive offers I only make a valuable to my VIP list.
An early edition of Dale Carnegie's mega selling book: How To Win Friends & Influence People. The first print run was only 5,000 copies. Before long it was selling 5,000 a day. Today it sells more than 200,000 copies a year.


You'll think that Google web fonts will work well in Google Chrome. Well, no. And it was WORSE before too!
In <h1> titles, at least with my font (amaranth) – an ellipses (…) can make it revert to the fallback font. If you have a comma, then the text on the other side of the comma that is not with the ellipses will display the webfont. Weird eh?
Firstly I don't understand what's with the "read more" link and why it seems to be doing its own font thing even though I've told it not to. (I'll let it go for now).
Arvo displays oddly on my WP site on chrome (it seems to insert 9s that overlap).
This issues don't seem to be in Firefox. (Or even, gasp, IE!) So it's a chrome issue.
It's still an improvement to about a year ago when google web fonts wouldn't render clearly in Chrome.


Congratulations! So glad to read this. Dieter will love the follow-up report.
I plan on calling him when I get home to let him know and possibly planning a day trip to Jack frost (if still open) to bring him cookies and beer lol.
Nothing wrong at all with easy little tweaks like that just to see how it affects things. If it doesn't work, you move them back. Bonus is it DID work.
Do the boots still feel too stiff? It sounds like not.
There's a lot to be said for DIY bootfitting and on-snow-trial-and-error. I'm all for it.
Not anymore since getting all the other issues taken care of. My edging was fixed by the cuff alignment, so it wasn't the boot stiffness at all.
If you find yourself at Jack(son) Frost in the next weekend or two, let us know. Maybe we can all take some runs together. We're more often at Montage, but do go to Jack Frost a few times a season.
He is okay, thankfully. It could have been way worse.
Oh no! Glad he's OK! We had a friend break one of his skis out west a few years ago. Broke it hucking a very small cliff/jump. Landed weird or maybe on something buried in the snow and RIP ski.
Wow, definitely better his board than the tree! That's a bummer, but overall, a good trip it sounds like.
Holy crap! Whatever happened I'm glad that you said it could have been way worse cuz that means he's OK.
Yes. Glad he is ok because that sounds like it could have been bad!
Glad to hear he isn't hurt.


text:
package searcher

import (
	"reflect"
	"testing"

	"github.com/blevesearch/bleve/v2/document"
	index "github.com/blevesearch/bleve_index_api"
)

var (
	leftRectEdgeMultiPoint [][]float64   = [][]float64{{-1, 0.2}, {-0.9, 0.1}}
	leftRectWithHole       [][][]float64 = [][][]float64{{{-1, 0}, {0, 0}, {0, 1}, {-1, 1}, {-1, 0}},
		{{-0.75, 0.25}, {-0.75, -0.75}, {-0.25, 0.75}, {-0.25, 0.25}, {-0.74, 0.25}}}
	leftRectEdgePoint  []float64   = []float64{-1, 0.2}
	leftRectMultiPoint [][]float64 = [][]float64{{0.5, 0.5}, {-0.9, 0.1}}
)

func testCaseSetup(t *testing.T, docShapeName, docShapeType string, docShapeVertices [][][][]float64,
	i index.Index) (index.IndexReader, func() error, error) {
	doc := document.NewDocument(docShapeName)
	doc.AddField(document.NewGeoShapeFieldWithIndexingOptions("geometry", []uint64{},
		docShapeVertices, docShapeType, document.DefaultGeoShapeIndexingOptions))
	err := i.Update(doc)
	if err != nil {
		return nil, nil, err
	}
	indexReader, err := i.Reader()
	if err != nil {
		t.Fatal(err)
	}

	closeFn := func() error {
		err = i.Delete(doc.ID())
		if err != nil {
			return err
		}
		err = indexReader.Close()
		if err != nil {
			return err
		}
		return nil
	}

	return indexReader, closeFn, nil
}

func TestPointPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       []float64
		DocShapeVertices [][][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       rightRectPoint,
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Expected:         []string{"polygon1"},
			Desc:             "point inside polygon",
			QueryType:        "contains",
		},
		{
			QueryShape:       leftRectPoint,
			DocShapeVertices: nil,
			DocShapeName:     "",
			Expected:         nil,
			Desc:             "empty polygon",
			QueryType:        "contains",
		},
	}
	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "polygon",
			[][][][]float64{test.DocShapeVertices}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePointRelationQuery(test.QueryType,
				false, indexReader, [][]float64{test.QueryShape}, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for point: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestLinestringPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][]float64
		DocShapeVertices [][][]float64
		DocShapeName     string
		Desc             string
		Expected         []string
		QueryType        string
	}{
		{
			QueryShape:       [][]float64{{1, 2}, {3, 5}},
			DocShapeVertices: [][][]float64{{{1, 2}, {3, 5}, {2, 7}, {1, 2}}},
			DocShapeName:     "polygon1",
			Desc:             "linestring coinciding with edge of the polygon",
			Expected:         []string{"polygon1"},
			QueryType:        "contains",
		},
		{
			QueryShape:       [][]float64{{1, 0}, {0, 1}},
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Desc:             "diagonal of a square",
			Expected:         []string{"polygon1"},
			QueryType:        "contains",
		},
		{
			QueryShape:       [][]float64{{0.2, 0.2}, {0.8, 0.8}},
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Desc:             "linestring within polygon",
			Expected:         []string{"polygon1"},
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "polygon",
			[][][][]float64{test.DocShapeVertices}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeLinestringQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for linestring: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestEnvelopePointContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][]float64
		DocShapeVertices []float64
		DocShapeName     string
		Desc             string
		Expected         []string
		QueryType        string
	}{
		{
			QueryShape:       [][]float64{{0, 1}, {1, 0}},
			DocShapeVertices: []float64{0.5, 0.5},
			DocShapeName:     "point1",
			Desc:             "point completely within bounded rectangle",
			Expected:         nil, // will always be nil since point can't contain envelope
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "point",
			[][][][]float64{{{test.DocShapeVertices}}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeEnvelopeRelationQuery(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Fatal(err)
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for Envelope: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestEnvelopeLinestringContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][]float64
		DocShapeVertices [][]float64
		DocShapeName     string
		Desc             string
		Expected         []string
		QueryType        string
	}{
		{
			QueryShape:       [][]float64{{0, 1}, {1, 0}},
			DocShapeVertices: [][]float64{{0.5, 0.5}, {10, 10}},
			DocShapeName:     "linestring1",
			Desc:             "linestring partially within bounded rectangle",
			Expected:         nil, // will always be nil since linestring can't contain envelope
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "linestring",
			[][][][]float64{{test.DocShapeVertices}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeEnvelopeRelationQuery(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Fatal(err)
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for Envelope: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestEnvelopePolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][]float64
		DocShapeVertices [][][]float64
		DocShapeName     string
		Desc             string
		Expected         []string
		QueryType        string
	}{
		{
			QueryShape:       [][]float64{{0, 1}, {1, 0}},
			DocShapeVertices: [][][]float64{{{0.5, 0.5}, {1, 0.5}, {1, 1}, {0.5, 1}, {0.5, 0.5}}},
			DocShapeName:     "polygon1",
			Desc:             "polygon completely within bounded rectangle",
			Expected:         nil,
			QueryType:        "contains",
		},
		{
			QueryShape:       [][]float64{{0, 1}, {1, 0}},
			DocShapeVertices: [][][]float64{{{10.5, 10.5}, {11.5, 10.5}, {11.5, 11.5}, {10.5, 11.5}, {10.5, 10.5}}},
			DocShapeName:     "polygon1",
			Desc:             "polygon completely outside bounded rectangle",
			Expected:         nil,
			QueryType:        "contains",
		},
		{
			QueryShape:       [][]float64{{0, 1}, {1, 0}},
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Desc:             "polygon coincident with bounded rectangle",
			Expected:         []string{"polygon1"},
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "polygon",
			[][][][]float64{test.DocShapeVertices}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeEnvelopeRelationQuery(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Fatal(err)
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for Envelope: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestPolygonPointContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][]float64
		DocShapeVertices []float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       rightRect,
			DocShapeVertices: rightRectPoint,
			DocShapeName:     "point1",
			Expected:         nil, // nil since point is a non-closed shape
			Desc:             "point inside polygon",
			QueryType:        "contains",
		},
		{
			QueryShape:       leftRect,
			DocShapeVertices: leftRectEdgePoint,
			DocShapeName:     "point1",
			Expected:         nil,
			Desc:             "point on edge of polygon",
			QueryType:        "contains",
		},
		{
			QueryShape:       leftRectWithHole,
			DocShapeVertices: leftRectPoint,
			DocShapeName:     "point1",
			Expected:         nil,
			Desc:             "point in polygon's hole",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "point",
			[][][][]float64{{{test.DocShapeVertices}}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePolygonQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for polygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})
		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestPolygonLinestringContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][]float64
		DocShapeVertices [][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       rightRect,
			DocShapeVertices: [][]float64{{0, 1}, {1, 0}},
			DocShapeName:     "linestring1",
			Expected:         nil, // nil since linestring is a non-closed shape
			Desc:             "diagonal of a square",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "linestring",
			[][][][]float64{{test.DocShapeVertices}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePolygonQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for polygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestPolygonEnvelopeContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][]float64
		DocShapeVertices [][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       [][][]float64{{{0.5, 0.5}, {1, 0.5}, {1, 1}, {0.5, 1}, {0.5, 0.5}}},
			DocShapeVertices: [][]float64{{0, 1}, {1, 0}},
			DocShapeName:     "envelope1",
			Expected:         nil,
			Desc:             "polygon contained inside envelope with edge overlaps", // this fails since
			// contains doesn't include edges or vertices
			QueryType: "contains",
		},
		{
			QueryShape:       [][][]float64{{{0.25, 0.25}, {0.5, 0.25}, {0.5, 0.5}, {0.25, 0.25}, {0.25, 0.25}}},
			DocShapeVertices: [][]float64{{0, 1}, {1, 0}},
			DocShapeName:     "envelope1",
			Expected:         []string{"envelope1"},
			Desc:             "polygon contained completely inside envelope",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "envelope",
			[][][][]float64{{test.DocShapeVertices}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePolygonQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for polygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestMultiPointPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][]float64
		DocShapeVertices [][][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       leftRectEdgeMultiPoint,
			DocShapeVertices: leftRectWithHole,
			DocShapeName:     "polygon1",
			Expected:         []string{"polygon1"},
			Desc:             "multi point inside polygon with hole",
			QueryType:        "contains",
		},
		{
			QueryShape:       [][]float64{{1, 0.5}},
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Expected:         nil,
			Desc:             "multi point on polygon edge",
			QueryType:        "contains",
		},
		{
			QueryShape: [][]float64{{0.3, 0.3}, {0.5, 0.5}},
			DocShapeVertices: [][][]float64{{{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}},
				{{0.2, 0.2}, {0.4, 0.2}, {0.4, 0.4}, {0.2, 0.4}, {0.2, 0.2}}},
			DocShapeName: "polygon1",
			Expected:     nil, // returns nil since one of the points is within the hole
			Desc:         "multi point inside polygon and hole",
			QueryType:    "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "polygon",
			[][][][]float64{test.DocShapeVertices}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePointRelationQuery(test.QueryType,
				true, indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for multipoint: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestMultiPointLinestringContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][]float64
		DocShapeVertices [][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       leftRectEdgeMultiPoint,
			DocShapeVertices: [][]float64{{-1, 0.2}, {-0.9, 0.1}},
			DocShapeName:     "linestring1",
			Expected:         nil,
			Desc:             "multi point overlaps with all linestring end points",
			QueryType:        "contains",
		},
		{
			QueryShape:       [][]float64{{-1, 0.2}, {-0.9, 0.1}, {0.5, 0.5}},
			DocShapeVertices: [][]float64{{-1, 0.2}, {-0.9, 0.1}},
			DocShapeName:     "linestring1",
			Expected:         nil,
			Desc:             "multi point overlaps with some linestring end points",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "linestring",
			[][][][]float64{{test.DocShapeVertices}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePointRelationQuery(test.QueryType,
				true, indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for multipoint: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestMultiPointContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][]float64
		DocShapeVertices [][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       leftRectEdgeMultiPoint,
			DocShapeVertices: [][]float64{{-1, 0.2}, {-0.9, 0.1}},
			DocShapeName:     "multipoint1",
			Expected:         []string{"multipoint1"},
			Desc:             "multi point overlaps with all multi points",
			QueryType:        "contains",
		},
		{
			QueryShape:       [][]float64{{-1, 0.2}, {-0.9, 0.1}, {0.5, 0.5}},
			DocShapeVertices: [][]float64{{-1, 0.2}, {-0.9, 0.1}},
			DocShapeName:     "multipoint1",
			Expected:         nil,
			Desc:             "multi point overlaps with some multi points",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "multipoint",
			[][][][]float64{{test.DocShapeVertices}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePointRelationQuery(test.QueryType,
				true, indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for multipoint: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][]float64
		DocShapeVertices [][][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       leftRect,
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Expected:         nil,
			Desc:             "polygons sharing an edge",
			QueryType:        "contains",
		},
		{
			QueryShape:       rightRect,
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Expected:         []string{"polygon1"},
			Desc:             "coincident polygons",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "polygon",
			[][][][]float64{test.DocShapeVertices}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePolygonQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for polygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestPolygonMultiPointContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][]float64
		DocShapeVertices [][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       leftRect,
			DocShapeVertices: leftRectEdgeMultiPoint,
			DocShapeName:     "multipoint1",
			Expected:         nil, // nil since multipoint is a non-closed shape
			Desc:             "multiple points on polygon edge",
			QueryType:        "contains",
		},
		{
			QueryShape:       leftRect,
			DocShapeVertices: leftRectMultiPoint,
			DocShapeName:     "multipoint1",
			Expected:         nil,
			Desc:             "multiple points, both outside and inside polygon",
			QueryType:        "contains",
		},
		{
			QueryShape:       leftRectWithHole,
			DocShapeVertices: leftRectMultiPoint,
			DocShapeName:     "multipoint1",
			Expected:         nil,
			Desc:             "multiple points in polygon hole",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "multipoint",
			[][][][]float64{{test.DocShapeVertices}}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapePolygonQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for polygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestMultiPolygonPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][][]float64
		DocShapeVertices [][][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       [][][][]float64{leftRect},
			DocShapeVertices: leftRect,
			DocShapeName:     "polygon1",
			Expected:         []string{"polygon1"},
			Desc:             "coincident polygons",
			QueryType:        "contains",
		},
		{
			QueryShape:       [][][][]float64{{{{2, 2}, {-2, 2}, {-2, -2}, {2, -2}}}},
			DocShapeVertices: leftRect,
			DocShapeName:     "polygon1",
			Expected:         nil,
			Desc:             "polygon larger than polygons in query shape",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "polygon",
			[][][][]float64{test.DocShapeVertices}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeMultiPolygonQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for polygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})

		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestMultiLinestringMultiPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][]float64
		DocShapeVertices [][][][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       [][][]float64{{{0.2, 1}, {0.8, 1}}, {{1, 0.2}, {1, 0.8}}},
			DocShapeVertices: [][][][]float64{rightRect},
			DocShapeName:     "multipolygon1",
			Expected:         nil, // contains doesn't include edges or vertices
			Desc:             "linestrings on edge of polygon",
			QueryType:        "contains",
		},
		{
			QueryShape:       [][][]float64{{{0.2, 0.2}, {0.8, 0.8}}, {{0.8, 0.2}, {0.2, 0.8}}},
			DocShapeVertices: [][][][]float64{{{{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}}}},
			DocShapeName:     "multipolygon1",
			Expected:         []string{"multipolygon1"},
			Desc:             "linestrings within polygon",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "multipolygon", test.DocShapeVertices, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeMultiLinestringQueryWithRelation(test.QueryType,
				indexReader, test.QueryShape, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for multilinestring: %+v",
					test.Expected, got, test.QueryShape)
			}
		})
		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestGeometryCollectionPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][][][]float64
		QueryShapeTypes  []string
		DocShapeVertices [][][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       [][][][][]float64{{{{{0, 1}, {1, 0}}}}},
			QueryShapeTypes:  []string{"linestring"},
			DocShapeVertices: rightRect,
			DocShapeName:     "polygon1",
			Expected:         []string{"polygon1"},
			Desc:             "linestring on edge of polygon",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "polygon",
			[][][][]float64{test.DocShapeVertices}, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeGeometryCollectionRelationQuery(test.QueryType,
				indexReader, test.QueryShape, test.QueryShapeTypes, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for polygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})
		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}

func TestGeometryCollectionMultiPolygonContains(t *testing.T) {
	tests := []struct {
		QueryShape       [][][][][]float64
		QueryShapeTypes  []string
		DocShapeVertices [][][][]float64
		DocShapeName     string
		Expected         []string
		Desc             string
		QueryType        string
	}{
		{
			QueryShape:       [][][][][]float64{{{{{1, 1}}}}},
			QueryShapeTypes:  []string{"point"},
			DocShapeVertices: [][][][]float64{rightRect, leftRect},
			DocShapeName:     "multipolygon1",
			Expected:         nil,
			Desc:             "point on vertex of one of the polygons",
			QueryType:        "contains",
		},
		{
			// WIP - Adding a point (-0.5,-0.5)
			QueryShape:       [][][][][]float64{{{{{0.2, 0.4}, {0.2, 0.2}, {0.4, 0.2}, {0.4, 0.4}}}}},
			QueryShapeTypes:  []string{"polygon"},
			DocShapeVertices: [][][][]float64{rightRect, leftRect},
			DocShapeName:     "multipolygon1",
			Expected:         []string{"multipolygon1"},
			Desc:             "polygon contained completely within multipolygons",
			QueryType:        "contains",
		},
	}

	i := setupIndex(t)

	for _, test := range tests {
		indexReader, closeFn, err := testCaseSetup(t, test.DocShapeName, "multipolygon", test.DocShapeVertices, i)
		if err != nil {
			t.Errorf(err.Error())
		}

		t.Run(test.Desc, func(t *testing.T) {
			got, err := runGeoShapeGeometryCollectionRelationQuery(test.QueryType,
				indexReader, test.QueryShape, test.QueryShapeTypes, "geometry")
			if err != nil {
				t.Errorf(err.Error())
			}
			if !reflect.DeepEqual(got, test.Expected) {
				t.Errorf("expected %v, got %v for multipolygon: %+v",
					test.Expected, got, test.QueryShape)
			}
		})
		err = closeFn()
		if err != nil {
			t.Errorf(err.Error())
		}
	}
}


When people think of losing weight, they usually think of diets that lead to hunger pangs or exercise plans that make one sweat profusely. Slimming plans like these do not tend to make a pretty picture. Instead of being a painful process, losing weight can be simple and less difficult using some of these tools.
When someone starts dieting, they might begin by trying to eat less food. Later on, they begin to feel hungry and look for a quick snack. The snack most commonly grabbed is something less than nutritious. Many dieting supplements are available, such as shakes and replacement bars. These products will fill one more easily and give a feeling of satisfaction. However, they do not contain high amounts of sugar or calories that would negate the dieting process.
This product works to give your skin a more youthful look. It shaves off rough, dead skin cells and smoothes out rugged skin areas. Simply keeping your skin moisturised can give you a slimmer and healthier appearance.
Green coffee, or the extract from green coffee, burns fat and is good to take before working out. Drinking green coffee will not give you the same benefit as taking it unroasted. The chlorogenic acid that is believed to help with the fat burning is destroyed in the brewing process. If you choose to use this product in slimming down, make sure you do not roast these beans into coffee.
Some body-oils can treat your body in a way that helps you lose weight. The main purpose for body oil is eliminating your body's toxins. In order to do that, you must make sure that the body oil you order is natural and preservative-free. You can best use the oil through the following process. Dampen your skin slightly, massage a small amount of oil into the damp skin, wait a few moments, then wash the oil away. A benefit of using this slimming product is that you will also soften your legs.
Celevac is a product that is used to reduce hunger. You can become slim through using this product, because your amount of hunger at a mealtime will be lowered. Instead of eating too much because you are hungry, you will be able to stop at an earlier point. This product can help you lose weight by helping you eat less, without feeling bad. However, make sure that you strictly follow the instructions on dosage, so that you do not cause any problems.
Special body shaping creams can help you slim down. They work by aiming for the most obstinate curves on your body. When applying, use sweeping, circular movements for the best results. Shop for slimming products online in Singapore to find products similar to this that will help you slim down.
There are many slimming products available that can help you improve your weight loss and appearance. Looking into some of these options can help make your journey a lot easier.
Previous PostMusic and Fashion Are Closely Related Next PostObtain the Celebrity Look Having a Luxury Belly Bar!


Resident Tony Calavetta is an 85-year-old writer who moved to the NoHo Senior Arts Colony to be among other creative folks and take part in big-city life. 'You get inspiration from other people,' he says.
Good morning, readers. Today is Saturday, November 24. Seniors are moving to North Hollywood to sing, dance and act.
Once opened, the NoHo Senior Arts Colony will include a 78-seat theater, reports the L.A. Times.
A body that burned in Canoga Park over the Thanksgiving day holiday has still not been identified, reports the Daily News.
Burbank could join Glendale, Pasadena and other cities in banning mobile ads, reports the Burbank Leader.
A hen who lived temporarily behind a Glendale Community College billboard died after being taken in by a Simi Valley family, reports the L.A. Times.


Various factors might influence your decision to replace a window. It could be the need to upgrade an existing window for more efficiency or just the desire to have a different look in your space.
Replacement windows can be fitted with minimum operations as you will not need to remove an entire wall. A contractor will measure the existing window dimension and give you the exact window size.
One thing that is of concern when looking for replacement windows is the cost. Fibreglass, vinyl, aluminum and timber are some of the materials used in windows. These materials will vary in cost and installation process. The size of your window will also affect the installation cost. Though it will require money to do an upgrade, its benefits far supersede any money worries.
A lot of heat is gained and lost through windows. Choose windows that can work in either cold or warm temperatures so as to avoid extra costs on heating and cooling appliances.
This will vary depending on your existing frame stability. If your existing frames are still in good condition, then you will need the Insert frames. These frames can fit well into the existing frames, allowing you to preserve the original frames. In cases where your old frames are pretty damaged, then you will need to pick the Full-frame windows. With the Full-frame windows, you will need to replace the entire window fixture. Going the Full-frame way may cost you more money but the end product will prove to be efficient.
Depending on your window functionality, you will need to decide on the best window design. Double-hung windows, Awning windows and Casement windows among others are best for air and ventilation, while Skylight, Transom and Glass Block windows are mostly designed to let in light.
You do not want to keep replacing your windows. Windows and all their associated parts like hinges, sash locks and handles should be made to last. Look for windows that can endure all weather conditions without the possibility of rotting or corroding.
The glazing of a window should be strong enough to create a barrier between the interior and the exterior of your house. Double-pane or triple-pane window glazing offer more layers of protection from heat and cold as compared to the single-pane window glazing. Noise transmission is also minimized with these two types of glazing.
To get the most out of your replacement window project, shop around for the contractors in town. Compare prices of windows and different accessories as well as the cost of installation. You could also re-sell your old window units to scrap dealers at a lower fee. This money will go a long way in settling a few bills during the project.


text:
Is Coffee Bad For Your Skin? Here's What Derms Think
When contemplating a skincare conundrum — Does collagen powder do anything? How much exfoliating is too much exfoliating? Is coffee bad for your skin? — I know exactly where to turn for clarity: science, of course. But in the case of that last question, science is sadly no help at all. There's evidence that a morning cuppa can cause acne… but there's also evidence it can soothe rosacea. It may constrict blood vessels and thus, impede the flow of nutrients to the skin… but it's also packed with potent antioxidants. Confused? Yeah, experts are, too.
"There's wide variation in terms of how people are affected by caffeine," Dr. Aanand Geria, M.D., a board-certified dermatologist with Geria Dermatology, tells The Zoe Report. Besides the aforementioned downsides, coffee drinking has been linked to an increase in cortisol production — and cortisol, "the stress hormone," is associated with a host of skin issues, from premature aging to dehydration. On the other hand: "A study last year showed that women who drank four or more cups of coffee a day had a 23 percent lower chance of developing rosacea," Dr. Geria says. (I mean… impressive, sure, but that's a jitter-inducing amount of java.) "This benefit can be attributed to not only the caffeine, but also the high amount of polyphenols in coffee, which function as antioxidants," the dermatologist explains. Antioxidants, as a refresher, help defend against premature aging and environmental aggressors. Most likely, these negatives and positives cancel each other out, and coffee has a net zero impact on skin health. "When caffeine is consumed in moderation there really should be no adverse effect to the skin," Dr. Geria confirms. That being said, every body is different, and some may be more susceptible to the not-so-great side effects of a large soy latte than others.
Starting to suspect your cold brew's been messing with your complexion? Ahead, five coffee alternatives that only have upsides.
"We're definitely a very coffee-centric society, and people are right to start questioning the overall benefits and risks," Sarah Koszyk, M.A., R.D.N., a registered dietitian and founder of MIJA Naturals, tells TZR. "Drinking too much coffee can result in increased anxiety and decreased sleep quality" — both of which impact your skin, by the way. Her suggestion? Say good morning to matcha.
"There is a rare class of amino acids in matcha, L-theanine, that works with the caffeine to release a 'calm focus' that aficionados describe as a high, that unwinds stress, enhances focus, and promotes creativity," she says. Which is precisely why ceremonial-grade, organic matcha is the base of her daily supplement, the Superstar. "Beyond this, so many of our ingredients such as goldenberries, camu camu, lucuma, cacao, avocado, turmeric, hemp seeds, chlorella, and nutritional yeast also provide comprehensive, anti-aging, health-optimizing benefits — from fortifying the immune system to optimizing skin health for glowing beauty from within," Koszyk says. Simply mix a tablespoon or two with hot water (it's very tasty) and enjoy.
Bev Welcomes Tara Hannaford As President
Champions, Technology
Startups Weekly: VCs are drunk on beverage st...
Baby food start-up Once Upon a Farm gets new ...
Once Upon A Farm Closes $20m Series B
Where To Score Free Ice Cream On National Ice...